github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/logger/dev.go (about) 1 package logger 2 3 import ( 4 "fmt" 5 "sync" 6 "sync/atomic" 7 "unsafe" 8 9 "go.uber.org/zap" 10 "go.uber.org/zap/zapcore" 11 ) 12 13 var ( 14 devLoggerPtr unsafe.Pointer 15 devMU sync.Mutex 16 ) 17 18 // DevInstance returns the instance for develop environment 19 func DevInstance() *zap.Logger { 20 devLogger := atomic.LoadPointer(&devLoggerPtr) 21 if devLogger != nil { 22 return (*zap.Logger)(devLogger) 23 } 24 25 devMU.Lock() 26 defer devMU.Unlock() 27 devLogger = atomic.LoadPointer(&devLoggerPtr) 28 if devLogger != nil { 29 return (*zap.Logger)(devLogger) 30 } 31 32 encoderConfig := zap.NewDevelopmentEncoderConfig() 33 34 zconf := zap.Config{ 35 DisableCaller: true, 36 DisableStacktrace: true, 37 Level: zap.NewAtomicLevelAt(zapcore.DebugLevel), 38 Development: true, 39 Encoding: "json", 40 EncoderConfig: encoderConfig, 41 OutputPaths: []string{"stdout"}, 42 ErrorOutputPaths: []string{"stderr"}, 43 } 44 45 devLoggerType, err := New(zconf) 46 if err != nil { 47 panic(fmt.Sprintf("DevInstance New:%v", err)) 48 } 49 50 atomic.StorePointer(&devLoggerPtr, unsafe.Pointer(devLoggerType)) 51 52 return devLoggerType 53 }