golang 日志
2024-10-21 13:13:28
package log
import (
"NOONASN/global"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
"path"
"path/filepath"
)
func GetLogger(name string) *zap.Logger {
logPath := global.Cfg.Logger.LogPath
if !path.IsAbs(logPath) {
if absLogPath, err := filepath.Abs(logPath); err == nil {
logPath = absLogPath
}
}
debug := global.Cfg.Logger.Debug
hook := lumberjack.Logger{
Filename: logPath, // 日志文件路径
MaxSize: 128, // 每个日志文件保存的大小 单位:M
MaxAge: 7, // 文件最多保存多少天
MaxBackups: 30, // 日志文件最多保存多少个备份
Compress: false, // 是否压缩
}
encoderConfig := zapcore.EncoderConfig{
MessageKey: "msg",
LevelKey: "level",
TimeKey: "time",
NameKey: "logger",
CallerKey: "file",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05"),
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder, // 短路径编码器
EncodeName: zapcore.FullNameEncoder,
}
// 设置日志级别
atomicLevel := zap.NewAtomicLevel()
atomicLevel.SetLevel(zap.DebugLevel)
var writes = []zapcore.WriteSyncer{zapcore.AddSync(&hook)}
// 如果是开发环境,同时在控制台上也输出
if debug {
writes = append(writes, zapcore.AddSync(os.Stdout))
}
core := zapcore.NewCore(
zapcore.NewJSONEncoder(encoderConfig), // json格式的日志
//zapcore.NewConsoleEncoder(encoderConfig), // 文子形式的日志
zapcore.NewMultiWriteSyncer(writes...),
atomicLevel,
)
// 开启开发模式,堆栈跟踪
caller := zap.AddCaller()
// 开启文件及行号
development := zap.Development()
// 设置初始化字段
field := zap.Fields(zap.String("appName", name))
// 构造日志
return zap.New(core, caller, development, field)
}
最新文章
- div+css:div中图片垂直居中
- Ubuntu杂记——链接ln的使用:创建和删除符号链接
- 图解JVM的Class文件格式(详细版)
- Linux常用指令(持续更新)
- iOS 用宏定义写一个单例(Singleton)
- C# 导出数据至 CSV
- UVA 10954 Add All 哈夫曼编码
- Factorial
- poj1195Mobile phones(二维树状数组)
- [转] JavaScript中的属性:如何遍历属性
- taobao-pamirs-proxycache开源缓存代理框架实现原理剖析
- nginx之 nginx + tomcat + redis 负载均衡且session一致性
- SVG裁切和蒙版
- python基础知识点(unittest)
- 从零基础到拿到网易Java实习offer,谈谈我的学习经验
- SpringBoot-06:SpringBoot增删改查一套完整的考试案例
- Selenium 爬取全国水质周报Word
- Matlab Codes and Datasets for Feature Learning
- 技能|三次简化一张图:一招理解LSTM/GRU门控机制
- .net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable