mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2025-12-29 00:58:49 -05:00
75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package log
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type levelMap map[logrus.Level]zerolog.Level
|
|
|
|
var levelMapping = levelMap{
|
|
logrus.PanicLevel: zerolog.PanicLevel,
|
|
logrus.ErrorLevel: zerolog.ErrorLevel,
|
|
logrus.TraceLevel: zerolog.TraceLevel,
|
|
logrus.DebugLevel: zerolog.DebugLevel,
|
|
logrus.WarnLevel: zerolog.WarnLevel,
|
|
logrus.InfoLevel: zerolog.InfoLevel,
|
|
}
|
|
|
|
// LogrusWrapper around zerolog. Required because idp uses logrus internally.
|
|
type LogrusWrapper struct {
|
|
zeroLog *zerolog.Logger
|
|
levelMap levelMap
|
|
}
|
|
|
|
// LogrusWrap returns a logrus logger which internally logs to /dev/null. Messages are passed to the
|
|
// underlying zerolog via hooks.
|
|
func LogrusWrap(zr zerolog.Logger) *logrus.Logger {
|
|
lr := logrus.New()
|
|
lr.SetOutput(io.Discard)
|
|
lr.SetLevel(logrusLevel(zr.GetLevel()))
|
|
lr.AddHook(&LogrusWrapper{
|
|
zeroLog: &zr,
|
|
levelMap: levelMapping,
|
|
})
|
|
|
|
return lr
|
|
}
|
|
|
|
// Levels on which logrus hooks should be triggered
|
|
func (h *LogrusWrapper) Levels() []logrus.Level {
|
|
return logrus.AllLevels
|
|
}
|
|
|
|
// Fire called by logrus on new message
|
|
func (h *LogrusWrapper) Fire(entry *logrus.Entry) error {
|
|
h.zeroLog.WithLevel(h.levelMap[entry.Level]).
|
|
Fields(zeroLogFields(entry.Data)).
|
|
Msg(entry.Message)
|
|
|
|
return nil
|
|
}
|
|
|
|
// Convert logrus fields to zerolog
|
|
func zeroLogFields(fields logrus.Fields) map[string]interface{} {
|
|
fm := make(map[string]interface{})
|
|
for k, v := range fields {
|
|
fm[k] = v
|
|
}
|
|
|
|
return fm
|
|
}
|
|
|
|
// Convert logrus level to zerolog
|
|
func logrusLevel(level zerolog.Level) logrus.Level {
|
|
for lrLvl, zrLvl := range levelMapping {
|
|
if zrLvl == level {
|
|
return lrLvl
|
|
}
|
|
}
|
|
|
|
panic("Unexpected loglevel")
|
|
}
|