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

log4j2

配置

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

  • properties
  • appenders

    • filter
    • pattern layout

      • mdc
    • policies

      • SizeBasedTriggeringPolicy
      • TimeBasedTriggeringPolicy
    • rollover strategy
  • loggers

    • root
    • logger
    • async logger
    • async root

应用

在应用上次要是思考几点:

  • log的输出

    • mdc的输出
    • kv构造的输出
    • tracing注入
  • log的输入

    • 输入格局

      • json格局
      • 指定pattern layout
    • 输入形式

      • 同步
      • 异步
    • 输入中央

      • console
      • file
      • kafka/logstash等
  • 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