configure json logger
This commit is contained in:
@@ -2,8 +2,10 @@ package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/LazyBachelor/LazyPM/internal/models"
|
||||
)
|
||||
@@ -23,15 +25,43 @@ type AppBuilder struct {
|
||||
}
|
||||
|
||||
func defaultBuilder(ctx context.Context, config Config) *AppBuilder {
|
||||
lifecycle := NewLifecycle()
|
||||
logger := newDefaultLogger(config, lifecycle)
|
||||
|
||||
return &AppBuilder{
|
||||
ctx: ctx,
|
||||
config: config,
|
||||
lifecycle: NewLifecycle(),
|
||||
lifecycle: lifecycle,
|
||||
initializer: &InteractiveInitializer{},
|
||||
logger: slog.New(slog.NewJSONHandler(os.Stdout, nil)),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func newDefaultLogger(config Config, lifecycle *Lifecycle) *slog.Logger {
|
||||
statsDir := filepath.Dir(config.StatisticsStoragePath)
|
||||
if statsDir == "" {
|
||||
statsDir = "."
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(statsDir, 0o755); err != nil {
|
||||
return slog.New(slog.NewJSONHandler(io.Discard, nil))
|
||||
}
|
||||
|
||||
logPath := filepath.Join(statsDir, "app-logs.jsonl")
|
||||
logFile, err := os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
|
||||
if err != nil {
|
||||
return slog.New(slog.NewJSONHandler(io.Discard, nil))
|
||||
}
|
||||
|
||||
if lifecycle != nil {
|
||||
lifecycle.Add(func() {
|
||||
_ = logFile.Close()
|
||||
})
|
||||
}
|
||||
|
||||
return slog.New(slog.NewJSONHandler(logFile, &slog.HandlerOptions{}))
|
||||
}
|
||||
|
||||
func WithLogger(logger *slog.Logger) Option {
|
||||
return func(b *AppBuilder) error {
|
||||
b.logger = logger
|
||||
|
||||
Reference in New Issue
Block a user