mirror of
https://github.com/ArvinLovegood/go-stock.git
synced 2025-07-19 00:00:09 +08:00
136 lines
4.2 KiB
Go
136 lines
4.2 KiB
Go
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
var Logger *zap.Logger
|
|
var SugaredLogger *zap.SugaredLogger
|
|
|
|
func init() {
|
|
InitLogger()
|
|
}
|
|
|
|
func InitLogger() {
|
|
//获取编码器
|
|
encoder := getEncoder()
|
|
|
|
//日志级别
|
|
highPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { //error级别
|
|
return lev >= zap.ErrorLevel
|
|
})
|
|
lowPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { //info和debug级别,debug级别是最低的
|
|
return lev < zap.ErrorLevel && lev >= zap.DebugLevel
|
|
})
|
|
|
|
//info文件WriteSyncer
|
|
infoFileWriteSyncer := getInfoWriterSyncer()
|
|
//error文件WriteSyncer
|
|
errorFileWriteSyncer := getErrorWriterSyncer()
|
|
|
|
//生成core
|
|
//multiWriteSyncer := zapcore.NewMultiWriteSyncer(writerSyncer, zapcore.AddSync(os.Stdout)) //AddSync将io.Writer转换成WriteSyncer的类型
|
|
//同时输出到控制台 和 指定的日志文件中
|
|
infoFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(infoFileWriteSyncer, zapcore.AddSync(os.Stdout)), lowPriority)
|
|
errorFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(errorFileWriteSyncer, zapcore.AddSync(os.Stdout)), highPriority)
|
|
|
|
//将infocore 和 errcore 加入core切片
|
|
var coreArr []zapcore.Core
|
|
coreArr = append(coreArr, infoFileCore)
|
|
coreArr = append(coreArr, errorFileCore)
|
|
|
|
//生成Logger
|
|
Logger = zap.New(zapcore.NewTee(coreArr...), zap.AddCaller()) //zap.AddCaller() 显示文件名 和 行号
|
|
SugaredLogger = Logger.Sugar()
|
|
}
|
|
|
|
func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
|
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
|
|
}
|
|
|
|
func levelEncoder(l zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
|
var level string
|
|
switch l {
|
|
case zapcore.DebugLevel:
|
|
level = "[DEBUG]"
|
|
case zapcore.InfoLevel:
|
|
level = "[INFO]"
|
|
case zapcore.WarnLevel:
|
|
level = "[WARN]"
|
|
case zapcore.ErrorLevel:
|
|
level = "[ERROR]"
|
|
case zapcore.DPanicLevel:
|
|
level = "[DPANIC]"
|
|
case zapcore.PanicLevel:
|
|
level = "[PANIC]"
|
|
case zapcore.FatalLevel:
|
|
level = "[FATAL]"
|
|
default:
|
|
level = fmt.Sprintf("[LEVEL(%d)]", l)
|
|
}
|
|
enc.AppendString(level)
|
|
}
|
|
|
|
func shortCallerEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
|
|
enc.AppendString(fmt.Sprintf("[%s]", caller.TrimmedPath()))
|
|
}
|
|
|
|
func NewEncoderConfig() zapcore.EncoderConfig {
|
|
return zapcore.EncoderConfig{
|
|
// Keys can be anything except the empty string.
|
|
TimeKey: "T",
|
|
LevelKey: "L",
|
|
NameKey: "N",
|
|
CallerKey: "C",
|
|
MessageKey: "M",
|
|
StacktraceKey: "S",
|
|
LineEnding: zapcore.DefaultLineEnding,
|
|
EncodeLevel: levelEncoder, //zapcore.CapitalLevelEncoder,
|
|
EncodeTime: timeEncoder, //指定时间格式
|
|
EncodeDuration: zapcore.StringDurationEncoder,
|
|
EncodeCaller: shortCallerEncoder, //zapcore.ShortCallerEncoder,
|
|
}
|
|
}
|
|
|
|
// core 三个参数之 Encoder 获取编码器
|
|
func getEncoder() zapcore.Encoder {
|
|
//自定义编码配置,下方NewJSONEncoder输出如下的日志格式
|
|
//{"L":"[INFO]","T":"2022-09-16 14:24:59.552","C":"[prototest/main.go:113]","M":"name = xiaoli, age = 18"}
|
|
//return zapcore.NewJSONEncoder(NewEncoderConfig())
|
|
|
|
//下方NewConsoleEncoder输出如下的日志格式
|
|
//2022-09-16 14:26:02.933 [INFO] [prototest/main.go:113] name = xiaoli, age = 18
|
|
return zapcore.NewConsoleEncoder(NewEncoderConfig())
|
|
}
|
|
|
|
// core 三个参数之 日志输出路径
|
|
func getInfoWriterSyncer() zapcore.WriteSyncer {
|
|
|
|
//引入第三方库 Lumberjack 加入日志切割功能
|
|
infoLumberIO := &lumberjack.Logger{
|
|
Filename: "./logs/info.log",
|
|
MaxSize: 10, // megabytes
|
|
MaxBackups: 100,
|
|
MaxAge: 28, // days
|
|
Compress: false, //Compress确定是否应该使用gzip压缩已旋转的日志文件。默认值是不执行压缩。
|
|
}
|
|
return zapcore.AddSync(infoLumberIO)
|
|
}
|
|
|
|
func getErrorWriterSyncer() zapcore.WriteSyncer {
|
|
//引入第三方库 Lumberjack 加入日志切割功能
|
|
lumberWriteSyncer := &lumberjack.Logger{
|
|
Filename: "./logs/error.log",
|
|
MaxSize: 10, // megabytes
|
|
MaxBackups: 100,
|
|
MaxAge: 28, // days
|
|
Compress: false, //Compress确定是否应该使用gzip压缩已旋转的日志文件。默认值是不执行压缩。
|
|
}
|
|
return zapcore.AddSync(lumberWriteSyncer)
|
|
}
|