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 (
"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