implement structured logging

This commit is contained in:
Markus Muellner
2022-06-30 19:37:10 +02:00
committed by Benj Fassbind
parent 0c749922c9
commit 8e62195eb5
21 changed files with 558 additions and 54 deletions

View File

@@ -35,6 +35,8 @@ type ConfigStructure struct { // nolint: maligned
AzurePublishRoots map[string]AzurePublishRoot `json:"AzurePublishEndpoints"`
AsyncAPI bool `json:"AsyncAPI"`
EnableMetricsEndpoint bool `json:"enableMetricsEndpoint"`
LogLevel string `json:"logLevel"`
LogFormat string `json:"logFormat"`
}
// FileSystemPublishRoot describes single filesystem publishing entry point
@@ -112,6 +114,8 @@ var Config = ConfigStructure{
AzurePublishRoots: map[string]AzurePublishRoot{},
AsyncAPI: false,
EnableMetricsEndpoint: false,
LogLevel: "debug",
LogFormat: "default",
}
// LoadConfig loads configuration from json file

View File

@@ -47,6 +47,9 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
s.config.AzurePublishRoots = map[string]AzurePublishRoot{"test": {
Container: "repo"}}
s.config.LogLevel = "info"
s.config.LogFormat = "json"
err := SaveConfig(configname, &s.config)
c.Assert(err, IsNil)
@@ -131,7 +134,9 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
" }\n"+
" },\n"+
" \"AsyncAPI\": false,\n"+
" \"enableMetricsEndpoint\": false\n"+
" \"enableMetricsEndpoint\": false,\n"+
" \"logLevel\": \"info\",\n"+
" \"logFormat\": \"json\"\n"+
"}")
}

68
utils/logging.go Normal file
View File

@@ -0,0 +1,68 @@
package utils
import (
"io"
"os"
"strings"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
type LogWriter struct {
Logger zerolog.Logger
}
func (lw LogWriter) Write(bs []byte) (int, error) {
return lw.Logger.With().Str("level", "info").Logger().Write(bs)
}
func SetupJSONLogger(levelStr string, w io.Writer) {
// zerolog.SetGlobalLevel(GetLogLevelOrDebug(levelStr))
zerolog.MessageFieldName = "message"
zerolog.LevelFieldName = "level"
// zerolog.TimestampFieldName= "time"
var tsHook timestampHook
log.Logger = zerolog.New(w).
Hook(&tsHook).
Level(GetLogLevelOrDebug(levelStr))
}
func SetupDefaultLogger(levelStr string) {
zerolog.MessageFieldName = "message"
zerolog.LevelFieldName = "level"
log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}).
Level(GetLogLevelOrDebug(levelStr)).
With().
Timestamp().
Logger()
}
func GetLogLevelOrDebug(levelStr string) zerolog.Level {
levelStr = strings.ToLower(levelStr)
if levelStr == "warning" {
levelStr = "warn"
}
var level zerolog.Level
err := level.UnmarshalText([]byte(levelStr))
if err == nil {
return level
}
log.Warn().Msgf("Unknown log level '%s', defaulting to debug", levelStr)
return zerolog.DebugLevel
}
type timestampHook struct{}
func (h *timestampHook) Run(e *zerolog.Event, l zerolog.Level, msg string) {
t := time.Now()
ts := t.Format(time.RFC3339)
e.Str("time", ts)
}