1 Star 0 Fork 0

鲁祖成/pkg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
logger.go 3.82 KB
一键复制 编辑 原始数据 按行查看 历史
azu 提交于 2021-05-24 19:19 . perf: init log mod
package logger
import (
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
"time"
)
// log
var log *zap.SugaredLogger
var levelMap = map[string]zapcore.Level{
"debug": zapcore.DebugLevel,
"info": zapcore.InfoLevel,
"warn": zapcore.WarnLevel,
"error": zapcore.ErrorLevel,
"panic": zapcore.PanicLevel,
"fatal": zapcore.FatalLevel,
}
/**
* 初始化日志
* filename 日志文件路径
* level 日志级别
* maxSize 每个日志文件保存的最大尺寸 单位:M
* maxBackups 日志文件最多保存多少个备份
* maxAge 文件最多保存多少天
* compress 是否压缩
* serviceName 服务名
* 由于zap不具备日志切割功能, 这里使用lumberjack配合
*/
func InitLogger() {
now := time.Now()
filename := fmt.Sprintf("%s/%04d-%02d-%02d.log", "runtime/logs", now.Year(), now.Month(), now.Day())
level := getLoggerLevel("debug")
// 日志切割
hook := &lumberjack.Logger{
Filename: filename,
MaxSize: 1 << 30, // 1G
MaxAge: 7, // 文件最多保存多少天
MaxBackups: 30, // 备份数
Compress: true, // 是否压缩
}
defer hook.Close()
// 配置
enConfig := zap.NewProductionEncoderConfig()
enConfig.TimeKey = "time" // 时间字段展示名字
enConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05") // 时间格式
enConfig.EncodeLevel = zapcore.CapitalLevelEncoder // 大写编码器
enConfig.EncodeCaller = zapcore.ShortCallerEncoder // 短路径编码器(相对路径+行号)
// 编码器配置
enCoder := zapcore.NewJSONEncoder(enConfig) // json格式
//enCoder := zapcore.NewConsoleEncoder(enConfig) // 文本格式
// 构造日志
core := zapcore.NewCore(
enCoder,
zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(hook)), // 输出到控制台和文件
zap.NewAtomicLevelAt(level),
)
caller := zap.AddCaller() // 开启文件及行号
logInstance := zap.New(core, caller, zap.AddCallerSkip(1))
log = logInstance.Sugar()
log.Debug("初始化日志完成")
return
}
func getLoggerLevel(lvl string) zapcore.Level {
if level, ok := levelMap[lvl]; ok {
return level
}
return zapcore.InfoLevel
}
// 简单日志记录
func Debug(args ...interface{}) {
log.Debug(args...)
}
func Info(args ...interface{}) {
log.Info(args...)
}
func Warn(args ...interface{}) {
log.Warn(args...)
}
func Error(args ...interface{}) {
log.Error(args...)
}
func Panic(args ...interface{}) {
log.Panic(args...)
}
func Fatal(args ...interface{}) {
log.Fatal(args...)
}
// 多参数(k v形式)日志记录
// logger.Infow("aaaaaa",
// zap.Int("status", 200),
// zap.String("method", "GET"),
// )
func Debugw(msg string, keysAndValues ...interface{}) {
log.Debugw(msg, keysAndValues...)
}
func Infow(msg string, keysAndValues ...interface{}) {
log.Infow(msg, keysAndValues...)
}
func Warnw(msg string, keysAndValues ...interface{}) {
log.Warnw(msg, keysAndValues...)
}
func Errorw(msg string, keysAndValues ...interface{}) {
log.Errorw(msg, keysAndValues...)
}
func Panicw(msg string, keysAndValues ...interface{}) {
log.Panicw(msg, keysAndValues...)
}
func Fatalw(msg string, keysAndValues ...interface{}) {
log.Fatalw(msg, keysAndValues...)
}
// 带格式化的日志记录
// logger.Infof("hello %s", "azu")
func Debugf(template string, args ...interface{}) {
log.Debugf(template, args...)
}
func Infof(template string, args ...interface{}) {
log.Infof(template, args...)
}
func Warnf(template string, args ...interface{}) {
log.Warnf(template, args...)
}
func Errorf(template string, args ...interface{}) {
log.Errorf(template, args...)
}
func Panicf(template string, args ...interface{}) {
log.Panicf(template, args...)
}
func Fatalf(template string, args ...interface{}) {
log.Fatalf(template, args...)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zucheng/pkg.git
git@gitee.com:zucheng/pkg.git
zucheng
pkg
pkg
v1.0.1

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385