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)
}

最新文章

  1. div+css:div中图片垂直居中
  2. Ubuntu杂记——链接ln的使用:创建和删除符号链接
  3. 图解JVM的Class文件格式(详细版)
  4. Linux常用指令(持续更新)
  5. iOS 用宏定义写一个单例(Singleton)
  6. C# 导出数据至 CSV
  7. UVA 10954 Add All 哈夫曼编码
  8. Factorial
  9. poj1195Mobile phones(二维树状数组)
  10. [转] JavaScript中的属性:如何遍历属性
  11. taobao-pamirs-proxycache开源缓存代理框架实现原理剖析
  12. nginx之 nginx + tomcat + redis 负载均衡且session一致性
  13. SVG裁切和蒙版
  14. python基础知识点(unittest)
  15. 从零基础到拿到网易Java实习offer,谈谈我的学习经验
  16. SpringBoot-06:SpringBoot增删改查一套完整的考试案例
  17. Selenium 爬取全国水质周报Word
  18. Matlab Codes and Datasets for Feature Learning
  19. 技能|三次简化一张图:一招理解LSTM/GRU门控机制
  20. .net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable

热门文章

  1. JZOJ 3232. 【佛山市选2013】排列
  2. grafana展示的CPU利用率与实际不符的问题探究
  3. 在VSCode中配置代码自动 eslint 格式化 (实测有用)
  4. day06-动态SQL语句
  5. LeetCode-794 有效的井字游戏
  6. Word11 工程学院讲师论文office真题
  7. vue 复制功能
  8. JAVA操作Mongo 数组模糊查询
  9. 使用PHP自带的过滤验证函数:Filter
  10. oracle 2个数组列,剔除数组重复的数据。