electricity_bill_calc_service/logger/xormlogger.go

98 lines
2.5 KiB
Go

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
}