Files
estserver/log.go
Andy Doan 7db7de5173 Initial commit
Copy some of our internal logging logic into the project to be used
throughout.

Signed-off-by: Andy Doan <andy@foundries.io>
2022-10-10 13:13:57 -05:00

54 lines
1.1 KiB
Go

package est
import (
"context"
stdlog "log"
"os"
"strings"
"time"
"github.com/rs/zerolog"
)
type (
ctxKey int
)
const (
loggerKey = ctxKey(100)
)
func InitLogger(level string) zerolog.Logger {
// GCP log explorer uses the time/timestamp and severity fields from the JSON payload to filter log messages
zerolog.TimeFieldFormat = time.RFC3339Nano
zerolog.LevelFieldName = "severity"
log := zerolog.New(os.Stdout).With().Timestamp().Logger()
if level == "" {
level = os.Getenv("LOG_LEVEL")
if level == "" {
level = "info"
}
}
l, err := zerolog.ParseLevel(strings.ToLower(level))
if err != nil {
l = zerolog.InfoLevel
log.Error().Msg("Cannot parse log level... continue as info")
}
log = log.Level(l)
stdlog.SetFlags(0)
genericLogger := log.With().
Str("source", "stdlog").
Str(zerolog.LevelFieldName, zerolog.LevelWarnValue).
Logger()
stdlog.SetOutput(genericLogger)
return log
}
func CtxWithLog(ctx context.Context, log zerolog.Logger) context.Context {
return context.WithValue(ctx, loggerKey, log)
}
func CtxGetLog(ctx context.Context) zerolog.Logger {
return ctx.Value(loggerKey).(zerolog.Logger)
}