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