github.com/status-im/status-go@v1.1.0/logutils/override.go (about) 1 package logutils 2 3 import ( 4 "os" 5 "strings" 6 7 logging "github.com/ipfs/go-log/v2" 8 9 "github.com/ethereum/go-ethereum/log" 10 ) 11 12 type LogSettings struct { 13 Enabled bool `json:"Enabled"` 14 MobileSystem bool `json:"MobileSystem"` 15 Level string `json:"Level"` 16 File string `json:"File"` 17 MaxSize int `json:"MaxSize"` 18 MaxBackups int `json:"MaxBackups"` 19 CompressRotated bool `json:"CompressRotated"` 20 } 21 22 // OverrideWithStdLogger overwrites ethereum's root logger with a logger from golang std lib. 23 func OverrideWithStdLogger(logLevel string) error { 24 return enableRootLog(logLevel, NewStdHandler(log.TerminalFormat(false))) 25 } 26 27 // OverrideRootLogWithConfig derives all configuration from params.NodeConfig and configures logger using it. 28 func OverrideRootLogWithConfig(settings LogSettings, colors bool) error { 29 if !settings.Enabled { 30 return nil 31 } 32 if settings.MobileSystem { 33 return OverrideWithStdLogger(settings.Level) 34 } 35 return OverrideRootLog(settings.Enabled, settings.Level, FileOptions{ 36 Filename: settings.File, 37 MaxSize: settings.MaxSize, 38 MaxBackups: settings.MaxBackups, 39 Compress: settings.CompressRotated, 40 }, colors) 41 42 } 43 44 // OverrideRootLog overrides root logger with file handler, if defined, 45 // and log level (defaults to INFO). 46 func OverrideRootLog(enabled bool, levelStr string, fileOpts FileOptions, terminal bool) error { 47 if !enabled { 48 disableRootLog() 49 return nil 50 } 51 if os.Getenv("CI") == "true" { 52 terminal = false 53 } 54 var ( 55 handler log.Handler 56 ) 57 if fileOpts.Filename != "" { 58 if fileOpts.MaxBackups == 0 { 59 // Setting MaxBackups to 0 causes all log files to be kept. Even setting MaxAge to > 0 doesn't fix it 60 // Docs: https://pkg.go.dev/gopkg.in/natefinch/lumberjack.v2@v2.0.0#readme-cleaning-up-old-log-files 61 fileOpts.MaxBackups = 1 62 } 63 handler = FileHandlerWithRotation(fileOpts, log.TerminalFormat(terminal)) 64 } else { 65 handler = log.StreamHandler(os.Stderr, log.TerminalFormat(terminal)) 66 } 67 68 return enableRootLog(levelStr, handler) 69 } 70 71 func disableRootLog() { 72 log.Root().SetHandler(log.DiscardHandler()) 73 } 74 75 func enableRootLog(levelStr string, handler log.Handler) error { 76 if levelStr == "" { 77 levelStr = "INFO" 78 } 79 80 levelStr = strings.ToLower(levelStr) 81 82 level, err := log.LvlFromString(levelStr) 83 if err != nil { 84 return err 85 } 86 87 filteredHandler := log.LvlFilterHandler(level, handler) 88 log.Root().SetHandler(filteredHandler) 89 log.PrintOrigins(true) 90 91 // go-libp2p logger 92 lvl, err := logging.LevelFromString(levelStr) 93 if err != nil { 94 return err 95 } 96 97 logging.SetAllLoggers(lvl) 98 99 return nil 100 }