zap日志库
简介:
zap日志库是由uber开发的一个用于记录日志的库,相较于golang自带的日志库拥有更强大的功能。拥有结构化,快速,分级别记录日志等诸多优点。更多信息可以访问其官方库地址:GitHub
安装与导入:
- 在命令行使用命令
go get -u go.uber.org/zap
导入:
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
创建实例:
zap创建实例又三个方法:zap.NewProduction()
/zap.NewDevelopment()
或者zap.Example()
.这三个方法都能创建一个logger,但是记录的信息不同。
zap.NewProduction():
§ 调试级别消息不记录
§ Error,Dpanic级别的记录,会在堆栈中跟踪文件,Warn不会
§ 始终将调用者添加到文件中
§ 以时间戳格式打印日期
§ 以小写形式打印级别名称
zap.NewDevelopment():
§ 从警告级别向上打印到堆栈中来跟踪
§ 始终打印包/文件/行(方法)
§ 在行尾添加任何额外字段作为json字符串
§ 以大写形式打印级别名称
§ 以毫秒为单位打印ISO8601格式的时间戳
此处我们用production举例:
定义一个全局log对象:
var log *zap.Logger
初始化log:
log, _ := zap.NewProduction()
在需要的地方记录信息:
// 一句不同级别使用不同参数,具体一句情况而定。
log.Debug("This is a DEBUG message")
log.Info("This is an INFO message")
除了普通的logger,zap还提供了更加简单易用的sugarlogger,虽然在运行速度上比logger稍慢,但依旧比同类型的日志库快很多。在创建实例的时候只需要再对log对象调用.Sugar()
函数即可。
var log *zap.Logger
var sugar *zap.SugaredLogger
func initLogger() {
log, _ = zap.NewProduction()
sugar = log.Sugar()
}
他们在使用方法是基本一致的,如果对系统性能没有极致的要求,使用sugar也是完全够用的。
写入文件:
上面的创建方法都会默认把日志输出到控制台,然而在实际开发中一般都会选择存放到日志文件当中,而要将日志写入到文件当中就需要使用New()
函数来创建对象。
// 获取编码器--写入日志的方法
func getEncoder() zapcore.Encoder {
return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
}
// 文件写入地址
func getLogWriter() zapcore.WriteSyncer {
file, _ := os.Create("./test.log")
return zapcore.AddSync(file)
}
func InitLogger() {
writeSyncer := getLogWriter()
encoder := getEncoder()
// 第三个参数表示日志的级别
core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
logger := zap.New(core)
sugarLogger = logger.Sugar()
}
zap支持的日志级别有:
// DebugLevel logs are typically voluminous, and are usually disabled in
// production.
DebugLevel Level = iota - 1
// InfoLevel is the default logging priority.
InfoLevel
// WarnLevel logs are more important than Info, but don't need individual
// human review.
WarnLevel
// ErrorLevel logs are high-priority. If an application is running smoothly,
// it shouldn't generate any error-level logs.
ErrorLevel
// DPanicLevel logs are particularly important errors. In development the
// logger panics after writing the message.
DPanicLevel
// PanicLevel logs a message, then panics.
PanicLevel
// FatalLevel logs a message, then calls os.Exit(1).
FatalLevel
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用