package logger import ( "fmt" "github.com/rs/zerolog" "github.com/samber/lo" "xorm.io/xorm/log" ) type XormZeroLogger struct { logger *zerolog.Logger off bool show bool } func NewXormZeroLogger(oLogger *zerolog.Logger) *XormZeroLogger { return &XormZeroLogger{ logger: lo.ToPtr(oLogger.With().Str("process", "Xorm").Logger()), off: false, show: true, } } func (l XormZeroLogger) BeforeSQL(_ log.LogContext) {} func (l XormZeroLogger) AfterSQL(c log.LogContext) { if c.Err == nil { l.logger.Info().Str("SQL", c.SQL).Str("args", FormatAny(c.Args)).Dur("execution", c.ExecuteTime).Send() return } l.logger.Error().Err(c.Err).Stack().Str("SQL", c.SQL).Str("args", FormatAny(c.Args)).Dur("execution", c.ExecuteTime).Msg(c.Err.Error()) } func (l XormZeroLogger) Debug(v ...interface{}) { l.logger.Debug().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) } func (l XormZeroLogger) Debugf(format string, v ...interface{}) { l.logger.Debug().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) } func (l XormZeroLogger) Info(v ...interface{}) { l.logger.Info().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) } func (l XormZeroLogger) Infof(format string, v ...interface{}) { l.logger.Info().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) } func (l XormZeroLogger) Warn(v ...interface{}) { l.logger.Warn().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) } func (l XormZeroLogger) Warnf(format string, v ...interface{}) { l.logger.Warn().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) } func (l XormZeroLogger) Error(v ...interface{}) { l.logger.Error().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) } func (l XormZeroLogger) Errorf(format string, v ...interface{}) { l.logger.Error().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) } func (l XormZeroLogger) SetLevel(lvl log.LogLevel) { l.logger.Warn().Msg("Change log level is not supported.") } func (l *XormZeroLogger) ShowSQL(b ...bool) { l.show = b[0] } func (l XormZeroLogger) IsShowSQL() bool { return l.show } func (l XormZeroLogger) Level() log.LogLevel { if l.off { return log.LOG_OFF } for _, lvl := range []zerolog.Level{zerolog.DebugLevel, zerolog.InfoLevel, zerolog.WarnLevel, zerolog.ErrorLevel, zerolog.FatalLevel, zerolog.PanicLevel} { switch lvl { case zerolog.DebugLevel: return log.LOG_DEBUG case zerolog.InfoLevel: return log.LOG_INFO case zerolog.WarnLevel: return log.LOG_WARNING case zerolog.ErrorLevel: return log.LOG_ERR } } return log.LOG_UNKNOWN }