mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-04-20 19:38:39 +00:00
implement structured logging
This commit is contained in:
committed by
Benj Fassbind
parent
0c749922c9
commit
8e62195eb5
@@ -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
|
||||
|
||||
@@ -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
68
utils/logging.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user