Files
aptly/utils/logging.go
T
Nick Bozhenko cd30723750 feat: upgrade Go version and improve build system
- Upgrade Go version from 1.22 to 1.24 for better performance and security
- Add comprehensive golangci-lint configuration with:
  - Enable additional linters: bodyclose, dupl, exportloopref, gocognit, gocritic, gosec, prealloc
  - Configure complexity thresholds (cyclomatic: 15, cognitive: 20)
  - Set up security scanning with gosec
  - Add code quality rules with revive
  - Exclude test files from certain strict checks
- Update dependencies to latest stable versions:
  - aws-sdk-go-v2: various components updated
  - Azure SDK: updated to v1.18.0 for azcore
  - etcd client: remains at v3.6.1 for stability
  - prometheus client: updated to v1.22.0
  - zerolog: updated to v1.34.0
- Enhance logging utilities:
  - Add GetLogLevelOrDebug function for flexible log level configuration
  - Support "warning" as alias for "warn" level
  - Improve error handling for invalid log levels

These changes improve code quality checks, leverage latest Go features,
and ensure dependencies are up-to-date with security patches.
2025-07-10 10:21:48 -04:00

76 lines
1.6 KiB
Go

package utils
import (
"io"
"os"
"strings"
"syscall"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"golang.org/x/term"
)
// RunningOnTerminal checks whether stdout is terminal
func RunningOnTerminal() bool {
return term.IsTerminal(syscall.Stdout)
}
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.MessageFieldName = "message"
zerolog.LevelFieldName = "level"
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,
FormatTimestamp: func(_ interface{}) string { return "" },
NoColor: !RunningOnTerminal(),
}).Level(GetLogLevelOrDebug(levelStr))
}
func GetLogLevelOrDebug(levelStr string) zerolog.Level {
if levelStr == "" {
return zerolog.DebugLevel
}
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, _ zerolog.Level, _ string) {
t := time.Now()
ts := t.Format(time.RFC3339)
e.Str("time", ts)
}