github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/shared/mlog/global.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package mlog 5 6 import ( 7 "context" 8 "log" 9 "sync/atomic" 10 11 "github.com/mattermost/logr" 12 "go.uber.org/zap" 13 "go.uber.org/zap/zapcore" 14 ) 15 16 var globalLogger *Logger 17 18 func InitGlobalLogger(logger *Logger) { 19 // Clean up previous instance. 20 if globalLogger != nil && globalLogger.logrLogger != nil { 21 globalLogger.logrLogger.Logr().Shutdown() 22 } 23 glob := *logger 24 glob.zap = glob.zap.WithOptions(zap.AddCallerSkip(1)) 25 globalLogger = &glob 26 IsLevelEnabled = globalLogger.IsLevelEnabled 27 Debug = globalLogger.Debug 28 Info = globalLogger.Info 29 Warn = globalLogger.Warn 30 Error = globalLogger.Error 31 Critical = globalLogger.Critical 32 Log = globalLogger.Log 33 LogM = globalLogger.LogM 34 Flush = globalLogger.Flush 35 ConfigAdvancedLogging = globalLogger.ConfigAdvancedLogging 36 ShutdownAdvancedLogging = globalLogger.ShutdownAdvancedLogging 37 AddTarget = globalLogger.AddTarget 38 RemoveTargets = globalLogger.RemoveTargets 39 EnableMetrics = globalLogger.EnableMetrics 40 } 41 42 // logWriterFunc provides access to mlog via io.Writer, so the standard logger 43 // can be redirected to use mlog and whatever targets are defined. 44 type logWriterFunc func([]byte) (int, error) 45 46 func (lw logWriterFunc) Write(p []byte) (int, error) { 47 return lw(p) 48 } 49 50 func RedirectStdLog(logger *Logger) { 51 if atomic.LoadInt32(&disableZap) == 0 { 52 zap.RedirectStdLogAt(logger.zap.With(zap.String("source", "stdlog")).WithOptions(zap.AddCallerSkip(-2)), zapcore.ErrorLevel) 53 return 54 } 55 56 writer := func(p []byte) (int, error) { 57 Log(LvlStdLog, string(p)) 58 return len(p), nil 59 } 60 log.SetOutput(logWriterFunc(writer)) 61 } 62 63 type IsLevelEnabledFunc func(LogLevel) bool 64 type LogFunc func(string, ...Field) 65 type LogFuncCustom func(LogLevel, string, ...Field) 66 type LogFuncCustomMulti func([]LogLevel, string, ...Field) 67 type FlushFunc func(context.Context) error 68 type ConfigFunc func(cfg LogTargetCfg) error 69 type ShutdownFunc func(context.Context) error 70 type AddTargetFunc func(...logr.Target) error 71 type RemoveTargetsFunc func(context.Context, func(TargetInfo) bool) error 72 type EnableMetricsFunc func(logr.MetricsCollector) error 73 74 // DON'T USE THIS Modify the level on the app logger 75 func GloballyDisableDebugLogForTest() { 76 globalLogger.consoleLevel.SetLevel(zapcore.ErrorLevel) 77 } 78 79 // DON'T USE THIS Modify the level on the app logger 80 func GloballyEnableDebugLogForTest() { 81 globalLogger.consoleLevel.SetLevel(zapcore.DebugLevel) 82 } 83 84 var IsLevelEnabled IsLevelEnabledFunc = defaultIsLevelEnabled 85 var Debug LogFunc = defaultDebugLog 86 var Info LogFunc = defaultInfoLog 87 var Warn LogFunc = defaultWarnLog 88 var Error LogFunc = defaultErrorLog 89 var Critical LogFunc = defaultCriticalLog 90 var Log LogFuncCustom = defaultCustomLog 91 var LogM LogFuncCustomMulti = defaultCustomMultiLog 92 var Flush FlushFunc = defaultFlush 93 94 var ConfigAdvancedLogging ConfigFunc = defaultAdvancedConfig 95 var ShutdownAdvancedLogging ShutdownFunc = defaultAdvancedShutdown 96 var AddTarget AddTargetFunc = defaultAddTarget 97 var RemoveTargets RemoveTargetsFunc = defaultRemoveTargets 98 var EnableMetrics EnableMetricsFunc = defaultEnableMetrics