configure json logger
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user