diff options
author | Wim <wim@42.be> | 2021-10-17 00:47:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-17 00:47:22 +0200 |
commit | 4dd8bae5c91fa4aef09d865d8fef1acd84f90925 (patch) | |
tree | ffad9b242daccaf8c86d1c1fbd59032302bd3be9 /vendor/github.com/mattermost/mattermost-server/v5/mlog/log.go | |
parent | 7ae45c42e712bd0e66c101f3f714c05aa1dc2104 (diff) | |
download | matterbridge-msglm-4dd8bae5c91fa4aef09d865d8fef1acd84f90925.tar.gz matterbridge-msglm-4dd8bae5c91fa4aef09d865d8fef1acd84f90925.tar.bz2 matterbridge-msglm-4dd8bae5c91fa4aef09d865d8fef1acd84f90925.zip |
Update dependencies (#1610)
* Update dependencies
* Update module to go 1.17
Diffstat (limited to 'vendor/github.com/mattermost/mattermost-server/v5/mlog/log.go')
-rw-r--r-- | vendor/github.com/mattermost/mattermost-server/v5/mlog/log.go | 325 |
1 files changed, 0 insertions, 325 deletions
diff --git a/vendor/github.com/mattermost/mattermost-server/v5/mlog/log.go b/vendor/github.com/mattermost/mattermost-server/v5/mlog/log.go deleted file mode 100644 index eaa8c109..00000000 --- a/vendor/github.com/mattermost/mattermost-server/v5/mlog/log.go +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -package mlog - -import ( - "context" - "fmt" - "io" - "log" - "os" - "sync/atomic" - "time" - - "github.com/mattermost/logr" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "gopkg.in/natefinch/lumberjack.v2" -) - -const ( - // Very verbose messages for debugging specific issues - LevelDebug = "debug" - // Default log level, informational - LevelInfo = "info" - // Warnings are messages about possible issues - LevelWarn = "warn" - // Errors are messages about things we know are problems - LevelError = "error" - - // DefaultFlushTimeout is the default amount of time mlog.Flush will wait - // before timing out. - DefaultFlushTimeout = time.Second * 5 -) - -var ( - // disableZap is set when Zap should be disabled and Logr used instead. - // This is needed for unit testing as Zap has no shutdown capabilities - // and holds file handles until process exit. Currently unit test create - // many server instances, and thus many Zap log files. - // This flag will be removed when Zap is permanently replaced. - disableZap int32 -) - -// Type and function aliases from zap to limit the libraries scope into MM code -type Field = zapcore.Field - -var Int64 = zap.Int64 -var Int32 = zap.Int32 -var Int = zap.Int -var Uint32 = zap.Uint32 -var String = zap.String -var Any = zap.Any -var Err = zap.Error -var NamedErr = zap.NamedError -var Bool = zap.Bool -var Duration = zap.Duration - -type TargetInfo logr.TargetInfo - -type LoggerConfiguration struct { - EnableConsole bool - ConsoleJson bool - ConsoleLevel string - EnableFile bool - FileJson bool - FileLevel string - FileLocation string -} - -type Logger struct { - zap *zap.Logger - consoleLevel zap.AtomicLevel - fileLevel zap.AtomicLevel - logrLogger *logr.Logger -} - -func getZapLevel(level string) zapcore.Level { - switch level { - case LevelInfo: - return zapcore.InfoLevel - case LevelWarn: - return zapcore.WarnLevel - case LevelDebug: - return zapcore.DebugLevel - case LevelError: - return zapcore.ErrorLevel - default: - return zapcore.InfoLevel - } -} - -func makeEncoder(json bool) zapcore.Encoder { - encoderConfig := zap.NewProductionEncoderConfig() - if json { - return zapcore.NewJSONEncoder(encoderConfig) - } - - encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder - return zapcore.NewConsoleEncoder(encoderConfig) -} - -func NewLogger(config *LoggerConfiguration) *Logger { - cores := []zapcore.Core{} - logger := &Logger{ - consoleLevel: zap.NewAtomicLevelAt(getZapLevel(config.ConsoleLevel)), - fileLevel: zap.NewAtomicLevelAt(getZapLevel(config.FileLevel)), - logrLogger: newLogr(), - } - - if config.EnableConsole { - writer := zapcore.Lock(os.Stderr) - core := zapcore.NewCore(makeEncoder(config.ConsoleJson), writer, logger.consoleLevel) - cores = append(cores, core) - } - - if config.EnableFile { - if atomic.LoadInt32(&disableZap) != 0 { - t := &LogTarget{ - Type: "file", - Format: "json", - Levels: mlogLevelToLogrLevels(config.FileLevel), - MaxQueueSize: DefaultMaxTargetQueue, - Options: []byte(fmt.Sprintf(`{"Filename":"%s", "MaxSizeMB":%d, "Compress":%t}`, - config.FileLocation, 100, true)), - } - if !config.FileJson { - t.Format = "plain" - } - if tgt, err := NewLogrTarget("mlogFile", t); err == nil { - logger.logrLogger.Logr().AddTarget(tgt) - } else { - Error("error creating mlogFile", Err(err)) - } - } else { - writer := zapcore.AddSync(&lumberjack.Logger{ - Filename: config.FileLocation, - MaxSize: 100, - Compress: true, - }) - - core := zapcore.NewCore(makeEncoder(config.FileJson), writer, logger.fileLevel) - cores = append(cores, core) - } - } - - combinedCore := zapcore.NewTee(cores...) - - logger.zap = zap.New(combinedCore, - zap.AddCaller(), - ) - return logger -} - -func (l *Logger) ChangeLevels(config *LoggerConfiguration) { - l.consoleLevel.SetLevel(getZapLevel(config.ConsoleLevel)) - l.fileLevel.SetLevel(getZapLevel(config.FileLevel)) -} - -func (l *Logger) SetConsoleLevel(level string) { - l.consoleLevel.SetLevel(getZapLevel(level)) -} - -func (l *Logger) With(fields ...Field) *Logger { - newlogger := *l - newlogger.zap = newlogger.zap.With(fields...) - if newlogger.logrLogger != nil { - ll := newlogger.logrLogger.WithFields(zapToLogr(fields)) - newlogger.logrLogger = &ll - } - return &newlogger -} - -func (l *Logger) StdLog(fields ...Field) *log.Logger { - return zap.NewStdLog(l.With(fields...).zap.WithOptions(getStdLogOption())) -} - -// StdLogAt returns *log.Logger which writes to supplied zap logger at required level. -func (l *Logger) StdLogAt(level string, fields ...Field) (*log.Logger, error) { - return zap.NewStdLogAt(l.With(fields...).zap.WithOptions(getStdLogOption()), getZapLevel(level)) -} - -// StdLogWriter returns a writer that can be hooked up to the output of a golang standard logger -// anything written will be interpreted as log entries accordingly -func (l *Logger) StdLogWriter() io.Writer { - newLogger := *l - newLogger.zap = newLogger.zap.WithOptions(zap.AddCallerSkip(4), getStdLogOption()) - f := newLogger.Info - return &loggerWriter{f} -} - -func (l *Logger) WithCallerSkip(skip int) *Logger { - newlogger := *l - newlogger.zap = newlogger.zap.WithOptions(zap.AddCallerSkip(skip)) - return &newlogger -} - -// Made for the plugin interface, wraps mlog in a simpler interface -// at the cost of performance -func (l *Logger) Sugar() *SugarLogger { - return &SugarLogger{ - wrappedLogger: l, - zapSugar: l.zap.Sugar(), - } -} - -func (l *Logger) Debug(message string, fields ...Field) { - l.zap.Debug(message, fields...) - if isLevelEnabled(l.logrLogger, logr.Debug) { - l.logrLogger.WithFields(zapToLogr(fields)).Debug(message) - } -} - -func (l *Logger) Info(message string, fields ...Field) { - l.zap.Info(message, fields...) - if isLevelEnabled(l.logrLogger, logr.Info) { - l.logrLogger.WithFields(zapToLogr(fields)).Info(message) - } -} - -func (l *Logger) Warn(message string, fields ...Field) { - l.zap.Warn(message, fields...) - if isLevelEnabled(l.logrLogger, logr.Warn) { - l.logrLogger.WithFields(zapToLogr(fields)).Warn(message) - } -} - -func (l *Logger) Error(message string, fields ...Field) { - l.zap.Error(message, fields...) - if isLevelEnabled(l.logrLogger, logr.Error) { - l.logrLogger.WithFields(zapToLogr(fields)).Error(message) - } -} - -func (l *Logger) Critical(message string, fields ...Field) { - l.zap.Error(message, fields...) - if isLevelEnabled(l.logrLogger, logr.Error) { - l.logrLogger.WithFields(zapToLogr(fields)).Error(message) - } -} - -func (l *Logger) Log(level LogLevel, message string, fields ...Field) { - l.logrLogger.WithFields(zapToLogr(fields)).Log(logr.Level(level), message) -} - -func (l *Logger) LogM(levels []LogLevel, message string, fields ...Field) { - var logger *logr.Logger - for _, lvl := range levels { - if isLevelEnabled(l.logrLogger, logr.Level(lvl)) { - // don't create logger with fields unless at least one level is active. - if logger == nil { - l := l.logrLogger.WithFields(zapToLogr(fields)) - logger = &l - } - logger.Log(logr.Level(lvl), message) - } - } -} - -func (l *Logger) Flush(cxt context.Context) error { - return l.logrLogger.Logr().FlushWithTimeout(cxt) -} - -// ShutdownAdvancedLogging stops the logger from accepting new log records and tries to -// flush queues within the context timeout. Once complete all targets are shutdown -// and any resources released. -func (l *Logger) ShutdownAdvancedLogging(cxt context.Context) error { - err := l.logrLogger.Logr().ShutdownWithTimeout(cxt) - l.logrLogger = newLogr() - return err -} - -// ConfigAdvancedLoggingConfig (re)configures advanced logging based on the -// specified log targets. This is the easiest way to get the advanced logger -// configured via a config source such as file. -func (l *Logger) ConfigAdvancedLogging(targets LogTargetCfg) error { - if err := l.ShutdownAdvancedLogging(context.Background()); err != nil { - Error("error shutting down previous logger", Err(err)) - } - - err := logrAddTargets(l.logrLogger, targets) - return err -} - -// AddTarget adds one or more logr.Target to the advanced logger. This is the preferred method -// to add custom targets or provide configuration that cannot be expressed via a -// config source. -func (l *Logger) AddTarget(targets ...logr.Target) error { - return l.logrLogger.Logr().AddTarget(targets...) -} - -// RemoveTargets selectively removes targets that were previously added to this logger instance -// using the passed in filter function. The filter function should return true to remove the target -// and false to keep it. -func (l *Logger) RemoveTargets(ctx context.Context, f func(ti TargetInfo) bool) error { - // Use locally defined TargetInfo type so we don't spread Logr dependencies. - fc := func(tic logr.TargetInfo) bool { - return f(TargetInfo(tic)) - } - return l.logrLogger.Logr().RemoveTargets(ctx, fc) -} - -// EnableMetrics enables metrics collection by supplying a MetricsCollector. -// The MetricsCollector provides counters and gauges that are updated by log targets. -func (l *Logger) EnableMetrics(collector logr.MetricsCollector) error { - return l.logrLogger.Logr().SetMetricsCollector(collector) -} - -// DisableZap is called to disable Zap, and Logr will be used instead. Any Logger -// instances created after this call will only use Logr. -// -// This is needed for unit testing as Zap has no shutdown capabilities -// and holds file handles until process exit. Currently unit tests create -// many server instances, and thus many Zap log file handles. -// -// This method will be removed when Zap is permanently replaced. -func DisableZap() { - atomic.StoreInt32(&disableZap, 1) -} - -// EnableZap re-enables Zap such that any Logger instances created after this -// call will allow Zap targets. -func EnableZap() { - atomic.StoreInt32(&disableZap, 0) -} |