extract common parts in logger and optimize code

This commit is contained in:
0x2d3c 2021-01-13 20:36:06 +08:00
parent ce610a9560
commit bb8b43df61

View File

@ -105,6 +105,21 @@ type logger struct {
traceStr, traceErrStr, traceWarnStr string traceStr, traceErrStr, traceWarnStr string
} }
func (l *logger) printf(ctx context.Context, str, msg string, level LogLevel, data ...interface{}) {
if l.LogLevel >= level {
l.Printf(str+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...)
}
}
func (l *logger) trace(ctx context.Context, fc func() (string, int64), ft string, used time.Duration, trace interface{}) {
sql, rows := fc()
if rows == -1 {
l.Printf(ft, utils.FileWithLineNum(), trace, float64(used.Nanoseconds())/1e6, "-", sql)
} else {
l.Printf(ft, utils.FileWithLineNum(), trace, float64(used.Nanoseconds())/1e6, rows, sql)
}
}
// LogMode log mode // LogMode log mode
func (l *logger) LogMode(level LogLevel) Interface { func (l *logger) LogMode(level LogLevel) Interface {
newlogger := *l newlogger := *l
@ -114,23 +129,17 @@ func (l *logger) LogMode(level LogLevel) Interface {
// Info print info // Info print info
func (l logger) Info(ctx context.Context, msg string, data ...interface{}) { func (l logger) Info(ctx context.Context, msg string, data ...interface{}) {
if l.LogLevel >= Info { l.printf(ctx, l.infoStr, msg, Info, data...)
l.Printf(l.infoStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...)
}
} }
// Warn print warn messages // Warn print warn messages
func (l logger) Warn(ctx context.Context, msg string, data ...interface{}) { func (l logger) Warn(ctx context.Context, msg string, data ...interface{}) {
if l.LogLevel >= Warn { l.printf(ctx, l.warnStr, msg, Warn, data...)
l.Printf(l.warnStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...)
}
} }
// Error print error messages // Error print error messages
func (l logger) Error(ctx context.Context, msg string, data ...interface{}) { func (l logger) Error(ctx context.Context, msg string, data ...interface{}) {
if l.LogLevel >= Error { l.printf(ctx, l.errStr, msg, Error, data...)
l.Printf(l.errStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...)
}
} }
// Trace print sql message // Trace print sql message
@ -138,28 +147,13 @@ func (l logger) Trace(ctx context.Context, begin time.Time, fc func() (string, i
if l.LogLevel > Silent { if l.LogLevel > Silent {
elapsed := time.Since(begin) elapsed := time.Since(begin)
switch { switch {
case err != nil && l.LogLevel >= Error:
sql, rows := fc()
if rows == -1 {
l.Printf(l.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
} else {
l.Printf(l.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
}
case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= Warn:
sql, rows := fc()
slowLog := fmt.Sprintf("SLOW SQL >= %v", l.SlowThreshold)
if rows == -1 {
l.Printf(l.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
} else {
l.Printf(l.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
}
case l.LogLevel == Info: case l.LogLevel == Info:
sql, rows := fc() l.trace(ctx, fc, l.traceStr, elapsed, err)
if rows == -1 { case err != nil && l.LogLevel >= Error:
l.Printf(l.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, "-", sql) l.trace(ctx, fc, l.traceErrStr, elapsed, err)
} else { case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= Warn:
l.Printf(l.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql) slowLog := fmt.Sprintf("SLOW SQL >= %v", l.SlowThreshold)
} l.trace(ctx, fc, l.traceWarnStr, elapsed, slowLog)
} }
} }
} }