MCPcopy Index your code
hub / github.com/rilldata/rill / initLogger

Function initLogger

cli/pkg/local/logger.go:31–100  ·  view source on GitHub ↗
(isVerbose, silent bool, logFormat LogFormat, logPath string)

Source from the content-addressed store, hash-verified

29}
30
31func initLogger(isVerbose, silent bool, logFormat LogFormat, logPath string) (logger *zap.Logger, cleanupFn func()) {
32 logLevel := zapcore.InfoLevel
33 if isVerbose {
34 logLevel = zapcore.DebugLevel
35 }
36 if silent {
37 logLevel = zapcore.PanicLevel
38 }
39
40 // lumberjack.Logger is already safe for concurrent use, so we don't need to
41 // lock it.
42 luLogger := &lumberjack.Logger{
43 Filename: logPath,
44 MaxSize: 100, // megabytes
45 MaxBackups: 3,
46 MaxAge: 30, // days
47 Compress: true,
48 }
49 cfg := zap.NewProductionEncoderConfig()
50 // hide logger name like `console`
51 cfg.NameKey = zapcore.OmitKey
52 cfg.EncodeTime = zapcore.ISO8601TimeEncoder
53 fileCore := zapcore.NewCore(zapcore.NewJSONEncoder(cfg), zapcore.AddSync(luLogger), logLevel)
54
55 var consoleEncoder zapcore.Encoder
56 opts := make([]zap.Option, 0)
57 switch logFormat {
58 case LogFormatJSON:
59 cfg := zap.NewProductionEncoderConfig()
60 cfg.NameKey = zapcore.OmitKey
61 cfg.EncodeTime = zapcore.ISO8601TimeEncoder
62 // never
63 opts = append(opts, zap.AddStacktrace(zapcore.InvalidLevel))
64 consoleEncoder = zapcore.NewJSONEncoder(cfg)
65 case LogFormatConsole:
66 encCfg := zap.NewDevelopmentEncoderConfig()
67 encCfg.NameKey = zapcore.OmitKey
68 encCfg.EncodeLevel = zapcore.CapitalColorLevelEncoder
69 encCfg.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02T15:04:05.000")
70 consoleEncoder = zapcore.NewConsoleEncoder(encCfg)
71 }
72
73 // If it's not verbose, skip the instance_id field.
74 if !isVerbose {
75 consoleEncoder = skipFieldZapEncoder{
76 Encoder: consoleEncoder,
77 fields: []string{"instance_id"},
78 }
79 }
80
81 consoleCore := zapcore.NewCore(consoleEncoder, zapcore.Lock(os.Stdout), logLevel)
82
83 // For the local console output, apply some filters that are usually not informative for the user.
84 if !isVerbose {
85 consoleCore = &filterZapCore{
86 next: consoleCore,
87 predicate: consoleFilterPredicate,
88 }

Callers 1

NewAppFunction · 0.85

Calls 3

CloseMethod · 0.65
LockMethod · 0.45
SyncMethod · 0.45

Tested by

no test coverage detected