mirror of
https://github.com/TecharoHQ/anubis.git
synced 2026-04-09 10:08:45 +00:00
37 lines
936 B
Go
37 lines
936 B
Go
package logging
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"log"
|
|
"log/slog"
|
|
"time"
|
|
)
|
|
|
|
// handlerWriter is an io.Writer that calls a Handler.
|
|
// It is used to link the default log.Logger to the default slog.Logger.
|
|
//
|
|
// Adapted from https://cs.opensource.google/go/go/+/refs/tags/go1.24.5:src/log/slog/logger.go;l=62
|
|
type handlerWriter struct {
|
|
h slog.Handler
|
|
level slog.Leveler
|
|
}
|
|
|
|
func (w *handlerWriter) Write(buf []byte) (int, error) {
|
|
level := w.level.Level()
|
|
if !w.h.Enabled(context.Background(), level) {
|
|
return 0, nil
|
|
}
|
|
var pc uintptr
|
|
|
|
// Remove final newline.
|
|
origLen := len(buf) // Report that the entire buf was written.
|
|
buf = bytes.TrimSuffix(buf, []byte{'\n'})
|
|
r := slog.NewRecord(time.Now(), level, string(buf), pc)
|
|
return origLen, w.h.Handle(context.Background(), r)
|
|
}
|
|
|
|
func StdlibLogger(next slog.Handler, level slog.Level) *log.Logger {
|
|
return log.New(&handlerWriter{h: next, level: level}, "", log.LstdFlags)
|
|
}
|