從log4j2的角度看golang的zap

本文主要從log4j2的角度對zap作一下小結git

log4j2

配置

從配置文件上看,分爲以下幾個部分:github

  • properties
  • appendersgolang

    • filter
    • pattern layoutjson

      • mdc
    • policiesapi

      • SizeBasedTriggeringPolicy
      • TimeBasedTriggeringPolicy
    • rollover strategy
  • loggersapp

    • root
    • logger
    • async logger
    • async root

使用

在使用上主要是考慮幾點:異步

  • log的輸入async

    • mdc的輸入
    • kv結構的輸入
    • tracing注入
  • log的輸出elasticsearch

    • 輸出格式日誌

      • 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

相關文章
相關標籤/搜索