mirror of
https://github.com/project-zot/zot.git
synced 2024-12-30 22:34:13 -05:00
d325c8b5f4
PR (linter: upgrade linter version #405) triggered lint job which failed with many errors generated by various linters. Configurations were added to golangcilint.yaml and several refactorings were made in order to improve the results of the linter. maintidx linter disabled Signed-off-by: Alex Stan <alexandrustan96@yahoo.ro>
91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
package log
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
const defaultPerms = 0o0600
|
|
|
|
// Logger extends zerolog's Logger.
|
|
type Logger struct {
|
|
zerolog.Logger
|
|
}
|
|
|
|
func (l Logger) Println(v ...interface{}) {
|
|
l.Logger.Error().Msg("panic recovered")
|
|
}
|
|
|
|
func NewLogger(level, output string) Logger {
|
|
zerolog.TimeFieldFormat = time.RFC3339Nano
|
|
|
|
lvl, err := zerolog.ParseLevel(level)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
zerolog.SetGlobalLevel(lvl)
|
|
|
|
var log zerolog.Logger
|
|
|
|
if output == "" {
|
|
log = zerolog.New(os.Stdout)
|
|
} else {
|
|
file, err := os.OpenFile(output, os.O_APPEND|os.O_WRONLY|os.O_CREATE, defaultPerms)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
log = zerolog.New(file)
|
|
}
|
|
|
|
return Logger{Logger: log.Hook(goroutineHook{}).With().Caller().Timestamp().Logger()}
|
|
}
|
|
|
|
func NewAuditLogger(level, audit string) *Logger {
|
|
zerolog.TimeFieldFormat = time.RFC3339Nano
|
|
|
|
lvl, err := zerolog.ParseLevel(level)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
zerolog.SetGlobalLevel(lvl)
|
|
|
|
var auditLog zerolog.Logger
|
|
|
|
auditFile, err := os.OpenFile(audit, os.O_APPEND|os.O_WRONLY|os.O_CREATE, defaultPerms)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
auditLog = zerolog.New(auditFile)
|
|
|
|
return &Logger{Logger: auditLog.With().Timestamp().Logger()}
|
|
}
|
|
|
|
// GoroutineID adds goroutine-id to logs to help debug concurrency issues.
|
|
func GoroutineID() int {
|
|
var buf [64]byte
|
|
n := runtime.Stack(buf[:], false)
|
|
idField := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0]
|
|
|
|
id, err := strconv.Atoi(idField)
|
|
if err != nil {
|
|
return -1
|
|
}
|
|
|
|
return id
|
|
}
|
|
|
|
type goroutineHook struct{}
|
|
|
|
func (h goroutineHook) Run(e *zerolog.Event, level zerolog.Level, msg string) {
|
|
if level != zerolog.NoLevel {
|
|
e.Int("goroutine", GoroutineID())
|
|
}
|
|
}
|