Kratos 日志系统与 Zap 集成

介绍 Kratos 日志组件的使用方式,并演示文件输出、Helper 封装以及与 Zap 日志库的集成。

官方文档

https://go-kratos.dev/zh-cn/docs/component/log/

主要是看文档为主

写文件

go
// 输出到 ./server.log 文件
f, err := os.OpenFile("server.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}

logger和helper

通过阅读kratos脚手架生成的代码发现,logger是在main函数当中注入进去的,biz和data在构造函数时Helper类型

  • main 统一了日志的接入方式
  • biz和data增强日志的使用

Helper更加全面,有数据脱敏,字段级别过滤,语法糖等功能

一般在biz或者data的构造函数添加字段的过滤

配合zap使用

github参考代码

https://github.com/go-kratos/kratos/blob/main/contrib/log/zap/zap.go

定义配置

yaml
log:
  format: "text" # 日志格式,text, json
  log_file: "logs/server.log" # 日志文件
  max_size: 100 # 单个文件最大 10MB
  max_backups: 10 # 保留 10 个旧文件
  max_age: 30 # 保留 30 天
  compress: true # 启用压缩

封装logger

text
internal/pkg/logger/zap.go

实现Log方法即可

在main.go引入

go
// zap 封装的日志
logger := log.With(logger.NewZapLogger(logger.NewOption(bc.Log)),
    "caller", log.DefaultCaller,
    "service.id", id,
    "service.name", Name,
    "service.version", Version,
    "trace.id", tracing.TraceID(),
    "span.id", tracing.SpanID(),
)
Kratos HTTP 请求与路由配置
Kratos 常用命令速查