github.com/adacta-ru/mattermost-server/v5@v5.31.1/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 Debug = globalLogger.Debug 27 Info = globalLogger.Info 28 Warn = globalLogger.Warn 29 Error = globalLogger.Error 30 Critical = globalLogger.Critical 31 Log = globalLogger.Log 32 LogM = globalLogger.LogM 33 Flush = globalLogger.Flush 34 ConfigAdvancedLogging = globalLogger.ConfigAdvancedLogging 35 ShutdownAdvancedLogging = globalLogger.ShutdownAdvancedLogging 36 AddTarget = globalLogger.AddTarget 37 RemoveTargets = globalLogger.RemoveTargets 38 EnableMetrics = globalLogger.EnableMetrics 39 } 40 41 // logWriterFunc provides access to mlog via io.Writer, so the standard logger 42 // can be redirected to use mlog and whatever targets are defined. 43 type logWriterFunc func([]byte) (int, error) 44 45 func (lw logWriterFunc) Write(p []byte) (int, error) { 46 return lw(p) 47 } 48 49 func RedirectStdLog(logger *Logger) { 50 if atomic.LoadInt32(&disableZap) == 0 { 51 zap.RedirectStdLogAt(logger.zap.With(zap.String("source", "stdlog")).WithOptions(zap.AddCallerSkip(-2)), zapcore.ErrorLevel) 52 return 53 } 54 55 writer := func(p []byte) (int, error) { 56 Log(LvlStdLog, string(p)) 57 return len(p), nil 58 } 59 log.SetOutput(logWriterFunc(writer)) 60 } 61 62 type LogFunc func(string, ...Field) 63 type LogFuncCustom func(LogLevel, string, ...Field) 64 type LogFuncCustomMulti func([]LogLevel, string, ...Field) 65 type FlushFunc func(context.Context) error 66 type ConfigFunc func(cfg LogTargetCfg) error 67 type ShutdownFunc func(context.Context) error 68 type AddTargetFunc func(...logr.Target) error 69 type RemoveTargetsFunc func(context.Context, func(TargetInfo) bool) error 70 type EnableMetricsFunc func(logr.MetricsCollector) error 71 72 // DON'T USE THIS Modify the level on the app logger 73 func GloballyDisableDebugLogForTest() { 74 globalLogger.consoleLevel.SetLevel(zapcore.ErrorLevel) 75 } 76 77 // DON'T USE THIS Modify the level on the app logger 78 func GloballyEnableDebugLogForTest() { 79 globalLogger.consoleLevel.SetLevel(zapcore.DebugLevel) 80 } 81 82 var Debug LogFunc = defaultDebugLog 83 var Info LogFunc = defaultInfoLog 84 var Warn LogFunc = defaultWarnLog 85 var Error LogFunc = defaultErrorLog 86 var Critical LogFunc = defaultCriticalLog 87 var Log LogFuncCustom = defaultCustomLog 88 var LogM LogFuncCustomMulti = defaultCustomMultiLog 89 var Flush FlushFunc = defaultFlush 90 91 var ConfigAdvancedLogging ConfigFunc = defaultAdvancedConfig 92 var ShutdownAdvancedLogging ShutdownFunc = defaultAdvancedShutdown 93 var AddTarget AddTargetFunc = defaultAddTarget 94 var RemoveTargets RemoveTargetsFunc = defaultRemoveTargets 95 var EnableMetrics EnableMetricsFunc = defaultEnableMetrics