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