electricity_bill_calc_service/logger/logger.go

154 lines
3.1 KiB
Go

package logger
import (
"electricity_bill_calc/types"
"os"
"github.com/shopspring/decimal"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
logger *zap.Logger
sugaredLogger *zap.SugaredLogger
)
func init() {
consoleWriterSync := zapcore.AddSync(os.Stderr)
rollingWriterSync := zapcore.AddSync(newRollingWriter())
consoleEncoderConfig := zap.NewProductionEncoderConfig()
consoleEncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder
consoleEncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
jsonEncoderConfig := zap.NewProductionEncoderConfig()
jsonEncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
consoleEncoder := zapcore.NewConsoleEncoder(consoleEncoderConfig)
jsonEncoder := zapcore.NewJSONEncoder(jsonEncoderConfig)
core := zapcore.NewTee(
zapcore.NewCore(
consoleEncoder,
consoleWriterSync,
zapcore.DebugLevel,
),
zapcore.NewCore(
jsonEncoder,
rollingWriterSync,
zapcore.DebugLevel,
),
)
logger = zap.New(core).Named("App")
sugaredLogger = logger.Sugar()
logger.Info("日志系统初始化完成。")
}
func GetLogger() *zap.Logger {
return logger
}
func Panic(msg string, fields ...zap.Field) {
logger.Panic(msg, fields...)
}
func Fatal(msg string, fields ...zap.Field) {
logger.Fatal(msg, fields...)
}
func Error(msg string, fields ...zap.Field) {
logger.Error(msg, fields...)
}
func Warn(msg string, fields ...zap.Field) {
logger.Warn(msg, fields...)
}
func Info(msg string, fields ...zap.Field) {
logger.Info(msg, fields...)
}
func Debug(msg string, fields ...zap.Field) {
logger.Debug(msg, fields...)
}
func Panicr(v ...interface{}) {
sugaredLogger.Panic(v...)
}
func Panicf(format string, v ...interface{}) {
sugaredLogger.Panicf(format, v...)
}
func Errorr(v ...interface{}) {
sugaredLogger.Panic(v...)
}
func Errorf(format string, v ...interface{}) {
sugaredLogger.Panicf(format, v...)
}
func Warnr(v ...interface{}) {
sugaredLogger.Warn(v...)
}
func Warnf(format string, v ...interface{}) {
sugaredLogger.Warnf(format, v...)
}
func Infor(v ...interface{}) {
sugaredLogger.Info(v...)
}
func Infof(format string, v ...interface{}) {
sugaredLogger.Infof(format, v...)
}
func Debugr(v ...interface{}) {
sugaredLogger.Debug(v...)
}
func Debugf(format string, v ...interface{}) {
sugaredLogger.Debugf(format, v...)
}
func Named(names ...string) *zap.Logger {
var l = logger
for _, name := range names {
l = l.Named(name)
}
return l
}
func NamedSugar(names ...string) *zap.SugaredLogger {
return Named(names...).Sugar()
}
func With(fields ...zap.Field) *zap.Logger {
return logger.With(fields...)
}
func WithSugar(fields ...zap.Field) *zap.SugaredLogger {
return logger.With(fields...).Sugar()
}
func DecimalField(key string, val *decimal.Decimal) zap.Field {
return zap.String(key, val.String())
}
func NullDecimalField(key string, val *decimal.NullDecimal) zap.Field {
if val.Valid {
return DecimalField(key, &val.Decimal)
}
return zap.String(key, "null")
}
func DateField(key string, val *types.Date) zap.Field {
return val.Log(key)
}
func DateTimeField(key string, val *types.DateTime) zap.Field {
return val.Log(key)
}