Initiliazation
This commit is contained in:
69
vv1/server/logging/logging.go
Normal file
69
vv1/server/logging/logging.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
)
|
||||
|
||||
var Logger *slog.Logger
|
||||
|
||||
type MultiHandler struct {
|
||||
handlers []slog.Handler
|
||||
}
|
||||
|
||||
func (m *MultiHandler) Enabled(ctx context.Context, level slog.Level) bool {
|
||||
for _, h := range m.handlers {
|
||||
if h.Enabled(ctx, level) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *MultiHandler) Handle(ctx context.Context, record slog.Record) error {
|
||||
for _, h := range m.handlers {
|
||||
_ = h.Handle(ctx, record)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MultiHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||
newHandlers := make([]slog.Handler, len(m.handlers))
|
||||
for i, h := range m.handlers {
|
||||
newHandlers[i] = h.WithAttrs(attrs)
|
||||
}
|
||||
return &MultiHandler{handlers: newHandlers}
|
||||
}
|
||||
|
||||
func (m *MultiHandler) WithGroup(name string) slog.Handler {
|
||||
newHandlers := make([]slog.Handler, len(m.handlers))
|
||||
for i, h := range m.handlers {
|
||||
newHandlers[i] = h.WithGroup(name)
|
||||
}
|
||||
return &MultiHandler{handlers: newHandlers}
|
||||
}
|
||||
|
||||
func InitLogger() {
|
||||
logFile, err := os.OpenFile("../angel_api-server.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
slog.Default().Error("Error opening log file", "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
fileHandler := slog.NewJSONHandler(logFile, &slog.HandlerOptions{Level: slog.LevelDebug})
|
||||
consoleHandler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug})
|
||||
|
||||
multiHandler := &MultiHandler{handlers: []slog.Handler{fileHandler, consoleHandler}}
|
||||
|
||||
Logger = slog.New(multiHandler)
|
||||
|
||||
slog.SetDefault(Logger)
|
||||
}
|
||||
|
||||
func GetLogger() *slog.Logger {
|
||||
if Logger == nil {
|
||||
InitLogger()
|
||||
}
|
||||
return Logger
|
||||
}
|
||||
Reference in New Issue
Block a user