1515package log
1616
1717import (
18- "fmt"
1918 "os"
2019
21- "go.uber.org/zap"
22- "go.uber.org/zap/zapcore"
20+ slogger "github.com/alibaba/opensandbox/internal/logger"
2321)
2422
2523const logFileEnvKey = "EXECD_LOG_FILE"
2624
27- var (
28- atomicLevel = zap .NewAtomicLevelAt (zap .InfoLevel )
29- base * zap.Logger
30- sugar * zap.SugaredLogger
31- )
32-
33- func init () {
34- cfg := zap .NewProductionConfig ()
35- cfg .Level = atomicLevel
36- cfg .EncoderConfig .EncodeTime = zapcore .ISO8601TimeEncoder
37- cfg .EncoderConfig .CallerKey = ""
38- cfg .DisableCaller = true
39- cfg .DisableStacktrace = true
40- cfg .EncoderConfig .StacktraceKey = ""
41-
42- logFile := os .Getenv (logFileEnvKey )
43- if logFile != "" {
44- cfg .OutputPaths = []string {logFile }
45- cfg .ErrorOutputPaths = []string {logFile }
46- } else {
47- // outputs log to stdout pipe by default
48- cfg .OutputPaths = []string {"stdout" }
49- cfg .ErrorOutputPaths = []string {"stdout" }
50- }
51-
52- logger , err := cfg .Build ()
53- if err != nil {
54- panic (fmt .Sprintf ("failed to init logger: %v" , err ))
55- }
56- base = logger
57- sugar = base .Sugar ()
58- }
25+ var current slogger.Logger
5926
60- // SetLevel maps legacy Beego log levels to zap levels .
61- // 0/1/2 => Fatal , 3 => Error , 4 => Warn , 5/6 => Info , 7+ => Debug .
62- func SetLevel (level int ) {
63- atomicLevel . SetLevel (mapLevel (level ))
27+ // Init constructs the singleton logger. Call once during startup .
28+ // Legacy levels: 0/1/2=fatal , 3=error , 4=warn , 5/6=info , 7+=debug .
29+ func Init (level int ) {
30+ current = newLogger (mapLevel (level ))
6431}
6532
66- func mapLevel (level int ) zapcore. Level {
33+ func mapLevel (level int ) string {
6734 switch {
6835 case level <= 2 :
69- return zapcore . FatalLevel
36+ return "fatal"
7037 case level == 3 :
71- return zapcore . ErrorLevel
38+ return "error"
7239 case level == 4 :
73- return zapcore . WarnLevel
40+ return "warn"
7441 case level == 5 || level == 6 :
75- return zapcore . InfoLevel
42+ return "info"
7643 default :
77- return zapcore . DebugLevel
44+ return "debug"
7845 }
7946}
8047
81- func Sync () {
82- _ = base .Sync ()
48+ func newLogger (level string ) slogger.Logger {
49+ cfg := slogger.Config {
50+ Level : level ,
51+ }
52+ if logFile := os .Getenv (logFileEnvKey ); logFile != "" {
53+ cfg .OutputPaths = []string {logFile }
54+ cfg .ErrorOutputPaths = cfg .OutputPaths
55+ }
56+ return slogger .MustNew (cfg )
57+ }
58+
59+ func getLogger () slogger.Logger {
60+ if current != nil {
61+ return current
62+ }
63+ l := newLogger ("info" )
64+ current = l
65+ return l
8366}
8467
8568func Debug (format string , args ... any ) {
86- sugar .Debugf (format , args ... )
69+ getLogger () .Debugf (format , args ... )
8770}
8871
8972func Info (format string , args ... any ) {
90- sugar .Infof (format , args ... )
73+ getLogger () .Infof (format , args ... )
9174}
9275
9376func Warn (format string , args ... any ) {
94- sugar .Warnf (format , args ... )
77+ getLogger () .Warnf (format , args ... )
9578}
9679
9780// Warning is an alias to Warn for compatibility.
@@ -100,5 +83,5 @@ func Warning(format string, args ...any) {
10083}
10184
10285func Error (format string , args ... any ) {
103- sugar .Errorf (format , args ... )
86+ getLogger () .Errorf (format , args ... )
10487}
0 commit comments