java日志打印心得

对于一个组件来说,日志打印常见的有三种选择:

  1. 不打印日志,只提供回调函数。将打印日志还是忽略的权利交给组件的使用者
  2. 可以由使用者设置一些参数,但组件自己管理整个日志的生命周期
  3. 适配生态内的日志框架,组件打印日志,但将输出的控制权控制反转给使用者

java生态slf4j已经成为事实上的标准,像Apache Ignite在最开始的时候也将日志作为自己的Spi定义,是向着2来发展的,但在Ignite3版本也去掉。Go生态由于去没有这样的标准,很多library只能选择2,导致引入了一个go library,它的日志会怎么出来,对于使用者来说是一个未知数。

java生态的基本原则如下:

  1. library,不会独立部署的组件,只引入slf4j-api,不引入具体的实现,可以在单元测试里面引入某个实现,用于测试打印日志。
  2. 简单的sdk不打印日志,复杂的sdk可以打印一些关键日志,但QPS级别的日志不要打印,不要替用户做选择。

如果在一个高度一致的团队内,可以无视上面两条