status-go/logutils/override.go

69 lines
1.6 KiB
Go

package logutils
import (
"io"
"os"
logging "github.com/ipfs/go-log/v2"
"go.uber.org/zap/zapcore"
)
type LogSettings struct {
Enabled bool `json:"Enabled"`
Level string `json:"Level"`
File string `json:"File"`
MaxSize int `json:"MaxSize"`
MaxBackups int `json:"MaxBackups"`
CompressRotated bool `json:"CompressRotated"`
Colorized bool `json:"Colorized"` // FIXME: doesn't take effect
}
func OverrideRootLoggerWithConfig(settings LogSettings) error {
return overrideCoreWithConfig(ZapLogger().Core().(*Core), settings)
}
func overrideCoreWithConfig(core *Core, settings LogSettings) error {
if !settings.Enabled {
core.UpdateSyncer(zapcore.AddSync(io.Discard))
return nil
}
if settings.Level == "" {
settings.Level = "info"
}
level, err := lvlFromString(settings.Level)
if err != nil {
return err
}
core.SetLevel(level)
if settings.File != "" {
if settings.MaxBackups == 0 {
// Setting MaxBackups to 0 causes all log files to be kept. Even setting MaxAge to > 0 doesn't fix it
// Docs: https://pkg.go.dev/gopkg.in/natefinch/lumberjack.v2@v2.0.0#readme-cleaning-up-old-log-files
settings.MaxBackups = 1
}
core.UpdateSyncer(ZapSyncerWithRotation(FileOptions{
Filename: settings.File,
MaxSize: settings.MaxSize,
MaxBackups: settings.MaxBackups,
Compress: settings.CompressRotated,
}))
} else {
core.UpdateSyncer(zapcore.Lock(os.Stderr))
}
// FIXME: remove go-libp2p logging altogether
// go-libp2p logger
{
lvl, err := logging.LevelFromString(settings.Level)
if err != nil {
return err
}
logging.SetAllLoggers(lvl)
}
return nil
}