从log4j2的角度看golang的zap


本文摘自网络,作者,侵删。

本文主要从log4j2的角度对zap做一下小结

log4j2

配置

从配置文件上看,分为如下几个部分:

  • properties
  • appenders
    • SizeBasedTriggeringPolicy
    • TimeBasedTriggeringPolicy
    • mdc
    • filter
    • pattern layout
    • policies
    • rollover strategy
  • loggers
    • root
    • logger
    • async logger
    • async root

使用

在使用上主要是考虑几点:

  • log的输入
    • mdc的输入
    • kv结构的输入
    • tracing注入
  • log的输出
    • console
    • file
    • kafka/logstash等
    • 同步
    • 异步
    • json格式
    • 指定pattern layout
    • 输出格式
    • 输出方式
    • 输出地方
  • log文件
    • 如何rolling
    • 如何压缩
    • 如何按level分文件输出

zap

  • zap貌似没有文件配置,都是通过api进行配置
  • zap要自定义layout的话,需要自己定制encoder,zap默认支持json格式
    • zap可以使用logger的With方法添加全局的field;也可以使用Info之类方法提供的Field参数动态添加field;后者可以结合golang的context衍生出类似log4j2的mdc的效果
  • zap的输出使用的是Sink/WriteSyncer,比如要输出到elasticsearch或者mq之类,可以自定义一个sink;zap默认支持console、file输出
    • 对于log文件的压缩以及rolling之类,zap可以借助lumberjack作为WriteSyncer来实现
    • 对于日志级别的过滤,可以借助levelFilterCore;如果要按level分文件,可以结合levelFilterCore创建不同level的core,然后通过zapcore.NewTee来衔接
    • 如果想要同时输出到多种不同的地方,可以使用zapcore.NewMultiWriteSyncer来包装成一个新的core

小结

zap目前貌似没有类似log4j2的async的log,针对layout需要自己定制encoder,针对输出需要自己定制Sink/WriteSyncer,要同时输出到多种不同的地方,可以使用zapcore.NewMultiWriteSyncer来包装成一个新的core。

doc

  • zap

本文来自:51CTO博客

感谢作者:mb6018e67ba1c26

查看原文:从log4j2的角度看golang的zap

相关阅读 >>

Golang如何调用函数?

Gocn译文视点】何时使用 rust, 何时使用 Go

json序列化在Golang中的应用

详解Go 中方法与函数的区别

Go 中使用控制流

值得推荐的五种自动化代码审查工具

Golang map是否有顺序

百度ai Go语言sdk

手撸Golang 行为型设计模式 命令模式

Golang Gorm 事务极简封装

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...