Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
kardolus
GitHub Repository: kardolus/chatgpt-cli
Path: blob/main/internal/logging.go
2649 views
1
package internal
2
3
import (
4
"go.uber.org/zap"
5
"go.uber.org/zap/zapcore"
6
"os"
7
)
8
9
type LevelSet map[zapcore.Level]bool
10
11
func (ls LevelSet) Enabled(l zapcore.Level) bool {
12
return ls[l]
13
}
14
15
var logLevels LevelSet
16
17
func SetAllowedLogLevels(levels ...zapcore.Level) {
18
newLevels := make(LevelSet)
19
for _, lvl := range levels {
20
newLevels[lvl] = true
21
}
22
logLevels = newLevels
23
InitLogger()
24
}
25
26
func InitLogger() {
27
encoderConfig := zapcore.EncoderConfig{
28
TimeKey: "", // Disable timestamp
29
LevelKey: "", // Disable log level
30
CallerKey: "", // Disable caller
31
FunctionKey: "", // Disable function name
32
StacktraceKey: "", // Disable stacktrace
33
MessageKey: "msg",
34
EncodeLevel: zapcore.CapitalLevelEncoder,
35
EncodeTime: zapcore.ISO8601TimeEncoder,
36
EncodeCaller: zapcore.ShortCallerEncoder,
37
}
38
39
consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig)
40
41
stdoutWriter := zapcore.Lock(os.Stdout)
42
stderrWriter := zapcore.Lock(os.Stderr)
43
44
// INFO & (optionally) DEBUG logs → stdout
45
stdoutCore := zapcore.NewCore(consoleEncoder, stdoutWriter, zap.LevelEnablerFunc(logLevels.Enabled))
46
47
// WARN, ERROR, and FATAL logs → stderr (always enabled)
48
stderrCore := zapcore.NewCore(consoleEncoder, stderrWriter, zap.LevelEnablerFunc(func(l zapcore.Level) bool {
49
return l >= zapcore.WarnLevel
50
}))
51
52
logger := zap.New(zapcore.NewTee(stdoutCore, stderrCore))
53
54
zap.ReplaceGlobals(logger)
55
}
56
57