engine/certlog.go
Rama main · réplica de lectura del repositorio original.
package engine
import (
"github.com/sirupsen/logrus"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// certMagicLogger returns a logger for CertMagic that passes the log messages
// on to logrus, so that they are formatted like the rest of the log messages
// and end up in the log file, if one is used
func certMagicLogger() *zap.Logger {
return zap.New(&logrusCore{})
}
// zapLevel converts a logrus log level to the corresponding zap log level
func zapLevel(level logrus.Level) zapcore.Level {
switch level {
case logrus.PanicLevel, logrus.FatalLevel, logrus.ErrorLevel:
return zapcore.ErrorLevel
case logrus.WarnLevel:
return zapcore.WarnLevel
case logrus.InfoLevel:
return zapcore.InfoLevel
default:
return zapcore.DebugLevel
}
}
// logrusCore is a zapcore.Core that logs with logrus
type logrusCore struct {
fields []zapcore.Field
}
func (c *logrusCore) Enabled(level zapcore.Level) bool {
return level >= zapLevel(logrus.GetLevel())
}
func (c *logrusCore) With(fields []zapcore.Field) zapcore.Core {
combined := make([]zapcore.Field, 0, len(c.fields)+len(fields))
combined = append(combined, c.fields...)
combined = append(combined, fields...)
return &logrusCore{fields: combined}
}
func (c *logrusCore) Check(entry zapcore.Entry, checked *zapcore.CheckedEntry) *zapcore.CheckedEntry {
if c.Enabled(entry.Level) {
return checked.AddCore(entry, c)
}
return checked
}
func (c *logrusCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
encoded := zapcore.NewMapObjectEncoder()
for _, field := range c.fields {
field.AddTo(encoded)
}
for _, field := range fields {
field.AddTo(encoded)
}
if entry.LoggerName != "" {
encoded.Fields["logger"] = entry.LoggerName
}
e := logrus.WithFields(logrus.Fields(encoded.Fields))
switch {
case entry.Level >= zapcore.ErrorLevel: // also for panic and fatal, since CertMagic should not end the process
e.Error(entry.Message)
case entry.Level == zapcore.WarnLevel:
e.Warn(entry.Message)
case entry.Level == zapcore.InfoLevel:
e.Info(entry.Message)
default:
e.Debug(entry.Message)
}
return nil
}
func (c *logrusCore) Sync() error {
return nil
}