从log4j2的角度看golang的zap

codecraft · · 423 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:codecraft

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

423 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传