序
本文主要从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