Files
payouts/internal/log/module.go
2026-03-05 11:21:18 +03:00

57 lines
1.1 KiB
Go

package log
import (
"log/slog"
"os"
slogmulti "github.com/samber/slog-multi"
"go.uber.org/fx"
"payouts/internal/config"
)
var Module = fx.Options(
fx.Provide(NewLogger),
)
// Params represents the module input params
type Params struct {
fx.In
AppConfig *config.App
}
func NewLogger(p Params) (*slog.Logger, error) {
logConfig := p.AppConfig.Log
opts := &slog.HandlerOptions{
Level: logConfig.Level,
}
handlers := []slog.Handler{}
if logConfig.StdoutEnabled {
if logConfig.TextOutput {
handlers = append(handlers, slog.NewTextHandler(os.Stdout, opts))
} else {
handlers = append(handlers, slog.NewJSONHandler(os.Stdout, opts))
}
}
if logConfig.FileEnabled {
file, err := os.OpenFile(logConfig.FilePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
return nil, err
}
if logConfig.TextOutput {
handlers = append(handlers, slog.NewTextHandler(file, opts))
} else {
handlers = append(handlers, slog.NewJSONHandler(file, opts))
}
}
logger := slog.New(slogmulti.Fanout(handlers...))
slog.SetDefault(logger)
return logger, nil
}