28
logger/gorm.go
Normal file
28
logger/gorm.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
type SlogWriter struct{}
|
||||
|
||||
func (w *SlogWriter) Printf(format string, args ...any) {
|
||||
msg := fmt.Sprintf(format, args...)
|
||||
slog.Info(msg)
|
||||
}
|
||||
|
||||
func GormLogger() logger.Interface {
|
||||
return logger.New(
|
||||
&SlogWriter{},
|
||||
logger.Config{
|
||||
SlowThreshold: 200 * time.Millisecond,
|
||||
LogLevel: logger.Warn,
|
||||
IgnoreRecordNotFoundError: true,
|
||||
Colorful: false,
|
||||
},
|
||||
)
|
||||
}
|
||||
@@ -1,12 +1,19 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
type otlpHandler struct {
|
||||
slog.Handler
|
||||
}
|
||||
|
||||
func Init() {
|
||||
levelStr := strings.ToLower(os.Getenv("LOG_LEVEL"))
|
||||
var level slog.Level
|
||||
@@ -22,14 +29,9 @@ func Init() {
|
||||
}
|
||||
|
||||
var writer io.Writer = os.Stdout
|
||||
|
||||
if level == slog.LevelDebug {
|
||||
file, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
|
||||
if err != nil {
|
||||
slog.Error("Failed to open log file for debug mode", "err", err)
|
||||
} else {
|
||||
writer = io.MultiWriter(os.Stdout, file)
|
||||
}
|
||||
file, _ := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
|
||||
writer = io.MultiWriter(os.Stdout, file)
|
||||
}
|
||||
|
||||
opts := &slog.HandlerOptions{
|
||||
@@ -43,7 +45,19 @@ func Init() {
|
||||
},
|
||||
}
|
||||
|
||||
handler := slog.NewJSONHandler(writer, opts)
|
||||
baseHandler := slog.NewJSONHandler(writer, opts)
|
||||
handler := &otlpHandler{baseHandler}
|
||||
logger := slog.New(handler)
|
||||
slog.SetDefault(logger)
|
||||
}
|
||||
|
||||
func (h *otlpHandler) Handle(ctx context.Context, r slog.Record) error {
|
||||
span := trace.SpanFromContext(ctx)
|
||||
if span.SpanContext().HasTraceID() {
|
||||
r.AddAttrs(
|
||||
slog.String("trace_id", span.SpanContext().TraceID().String()),
|
||||
slog.String("span_id", span.SpanContext().SpanID().String()),
|
||||
)
|
||||
}
|
||||
return h.Handler.Handle(ctx, r)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user