76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package other
|
|
|
|
import (
|
|
"flag"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
var cliFlagLogLevel = "info"
|
|
var cliFlagLogJson = false
|
|
|
|
func SetupFlags() {
|
|
flag.StringVar(
|
|
&cliFlagLogLevel,
|
|
"loglevel",
|
|
"info",
|
|
"Set the logging level. Valid values (case insensitive) are: debug, info, warn, error, fatal",
|
|
)
|
|
flag.BoolVar(
|
|
&cliFlagLogJson,
|
|
"logjson",
|
|
false,
|
|
"Log json objects to stderr instead of nicely formatted ones",
|
|
)
|
|
}
|
|
|
|
// Configure logging. Utilises the flags setup in [SetupFlags].
|
|
// If logWriter is not nil, will also write logs, as json objects,
|
|
// to the given writer
|
|
func ConfigureLogging(logWriter io.Writer) {
|
|
configOutputs(logWriter)
|
|
configLevel()
|
|
}
|
|
|
|
func configLevel() {
|
|
switch strings.ToLower(cliFlagLogLevel) {
|
|
case "trace":
|
|
zerolog.SetGlobalLevel(zerolog.TraceLevel)
|
|
case "debug":
|
|
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
|
case "info":
|
|
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
|
case "warn":
|
|
zerolog.SetGlobalLevel(zerolog.WarnLevel)
|
|
case "error":
|
|
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
|
|
case "fatal":
|
|
zerolog.SetGlobalLevel(zerolog.FatalLevel)
|
|
default:
|
|
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
|
}
|
|
log.Info().Str("new-level", cliFlagLogLevel).Msg("New logging level set")
|
|
}
|
|
|
|
func configOutputs(logWriter io.Writer) {
|
|
console := zerolog.ConsoleWriter{Out: os.Stderr}
|
|
extraLogWriters := []io.Writer{console}
|
|
if logWriter != nil {
|
|
extraLogWriters = append(extraLogWriters, logWriter)
|
|
}
|
|
if !cliFlagLogJson {
|
|
log.Logger = zerolog.New(zerolog.MultiLevelWriter(extraLogWriters...)).
|
|
With().
|
|
Timestamp().
|
|
Logger()
|
|
} else {
|
|
log.Logger = zerolog.New(zerolog.MultiLevelWriter(
|
|
append([]io.Writer{log.Logger}, extraLogWriters...)...,
|
|
)).With().Timestamp().Logger()
|
|
}
|
|
return
|
|
}
|