From fa16ecf98ac3467ee7b48622cedf8ae978b05fc1 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Tue, 13 Apr 2021 23:45:56 +0530 Subject: [PATCH] MM-34787: Add colored output for non JSON console logs (#17388) * MM-34787: Add colored output for non JSON console logs https://mattermost.atlassian.net/browse/MM-34787 ```release-note A new field EnableColor is added to LogSettings and NotificationLogSettings. Non-JSON console logs will now be colored if that field is set to true. ``` * Trigger CI --- model/config.go | 10 ++++++++++ shared/mlog/log.go | 10 +++++++--- shared/mlog/testing.go | 2 +- utils/logger.go | 2 ++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/model/config.go b/model/config.go index 464749ef1a..3a5d7b72d8 100644 --- a/model/config.go +++ b/model/config.go @@ -1201,6 +1201,7 @@ type LogSettings struct { EnableConsole *bool `access:"environment_logging,write_restrictable,cloud_restrictable"` ConsoleLevel *string `access:"environment_logging,write_restrictable,cloud_restrictable"` ConsoleJson *bool `access:"environment_logging,write_restrictable,cloud_restrictable"` + EnableColor *bool `access:"environment_logging,write_restrictable,cloud_restrictable"` // telemetry: none EnableFile *bool `access:"environment_logging,write_restrictable,cloud_restrictable"` FileLevel *string `access:"environment_logging,write_restrictable,cloud_restrictable"` FileJson *bool `access:"environment_logging,write_restrictable,cloud_restrictable"` @@ -1220,6 +1221,10 @@ func (s *LogSettings) SetDefaults() { s.ConsoleLevel = NewString("DEBUG") } + if s.EnableColor == nil { + s.EnableColor = NewBool(false) + } + if s.EnableFile == nil { s.EnableFile = NewBool(true) } @@ -1306,6 +1311,7 @@ type NotificationLogSettings struct { EnableConsole *bool `access:"write_restrictable,cloud_restrictable"` ConsoleLevel *string `access:"write_restrictable,cloud_restrictable"` ConsoleJson *bool `access:"write_restrictable,cloud_restrictable"` + EnableColor *bool `access:"write_restrictable,cloud_restrictable"` // telemetry: none EnableFile *bool `access:"write_restrictable,cloud_restrictable"` FileLevel *string `access:"write_restrictable,cloud_restrictable"` FileJson *bool `access:"write_restrictable,cloud_restrictable"` @@ -1338,6 +1344,10 @@ func (s *NotificationLogSettings) SetDefaults() { s.ConsoleJson = NewBool(true) } + if s.EnableColor == nil { + s.EnableColor = NewBool(false) + } + if s.FileJson == nil { s.FileJson = NewBool(true) } diff --git a/shared/mlog/log.go b/shared/mlog/log.go index ade786879c..d50fc1230e 100644 --- a/shared/mlog/log.go +++ b/shared/mlog/log.go @@ -73,6 +73,7 @@ type TargetInfo logr.TargetInfo type LoggerConfiguration struct { EnableConsole bool ConsoleJson bool + EnableColor bool ConsoleLevel string EnableFile bool FileJson bool @@ -103,12 +104,15 @@ func getZapLevel(level string) zapcore.Level { } } -func makeEncoder(json bool) zapcore.Encoder { +func makeEncoder(json, color bool) zapcore.Encoder { encoderConfig := zap.NewProductionEncoderConfig() if json { return zapcore.NewJSONEncoder(encoderConfig) } + if color { + encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder + } encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder return zapcore.NewConsoleEncoder(encoderConfig) } @@ -124,7 +128,7 @@ func NewLogger(config *LoggerConfiguration) *Logger { if config.EnableConsole { writer := zapcore.Lock(os.Stderr) - core := zapcore.NewCore(makeEncoder(config.ConsoleJson), writer, logger.consoleLevel) + core := zapcore.NewCore(makeEncoder(config.ConsoleJson, config.EnableColor), writer, logger.consoleLevel) cores = append(cores, core) } @@ -153,7 +157,7 @@ func NewLogger(config *LoggerConfiguration) *Logger { Compress: true, }) - core := zapcore.NewCore(makeEncoder(config.FileJson), writer, logger.fileLevel) + core := zapcore.NewCore(makeEncoder(config.FileJson, false), writer, logger.fileLevel) cores = append(cores, core) } } diff --git a/shared/mlog/testing.go b/shared/mlog/testing.go index c667283209..6b41a7e4fb 100644 --- a/shared/mlog/testing.go +++ b/shared/mlog/testing.go @@ -37,7 +37,7 @@ func NewTestingLogger(tb testing.TB, writer io.Writer) *Logger { mutex: &sync.RWMutex{}, } - logWriterCore := zapcore.NewCore(makeEncoder(true), zapcore.Lock(logWriterSync), testingLogger.consoleLevel) + logWriterCore := zapcore.NewCore(makeEncoder(true, false), zapcore.Lock(logWriterSync), testingLogger.consoleLevel) testingLogger.zap = zap.New(logWriterCore, zap.AddCaller(), diff --git a/utils/logger.go b/utils/logger.go index ea42ebb043..23d2558ee8 100644 --- a/utils/logger.go +++ b/utils/logger.go @@ -29,6 +29,7 @@ func MloggerConfigFromLoggerConfig(s *model.LogSettings, getFileFunc fileLocatio FileJson: *s.FileJson, FileLevel: strings.ToLower(*s.FileLevel), FileLocation: getFileFunc(*s.FileLocation), + EnableColor: *s.EnableColor, } } @@ -58,6 +59,7 @@ func GetLogSettingsFromNotificationsLogSettings(notificationLogSettings *model.N FileLevel: notificationLogSettings.FileLevel, FileLocation: notificationLogSettings.FileLocation, AdvancedLoggingConfig: notificationLogSettings.AdvancedLoggingConfig, + EnableColor: notificationLogSettings.EnableColor, } }