configure json logger

This commit is contained in:
Robin Olsen
2026-03-02 23:04:57 +01:00
parent cb10aeff6b
commit a8f8f63e88

View File

@@ -2,8 +2,10 @@ package app
import ( import (
"context" "context"
"io"
"log/slog" "log/slog"
"os" "os"
"path/filepath"
"github.com/LazyBachelor/LazyPM/internal/models" "github.com/LazyBachelor/LazyPM/internal/models"
) )
@@ -23,15 +25,43 @@ type AppBuilder struct {
} }
func defaultBuilder(ctx context.Context, config Config) *AppBuilder { func defaultBuilder(ctx context.Context, config Config) *AppBuilder {
lifecycle := NewLifecycle()
logger := newDefaultLogger(config, lifecycle)
return &AppBuilder{ return &AppBuilder{
ctx: ctx, ctx: ctx,
config: config, config: config,
lifecycle: NewLifecycle(), lifecycle: lifecycle,
initializer: &InteractiveInitializer{}, 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 { func WithLogger(logger *slog.Logger) Option {
return func(b *AppBuilder) error { return func(b *AppBuilder) error {
b.logger = logger b.logger = logger