关于golang:从log4j2的角度看golang的zap

7次阅读

共计 956 个字符,预计需要花费 3 分钟才能阅读完成。

本文次要从 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
正文完
 0