java日志总结系列4-log4j2配置及常见问题
java日志总结系列1-日志规范
java日志总结系列2-日志框架
java日志总结系列3-大型日志收集处理系统
java日志总结系列4-log4j2配置及常见问题
log4j2配置
配置可参考 https://logging.apache.org/log4j/2.x/manual/configuration.html
几个注意的点
- Logger是一个树形结构,最上层是Root,一个日志如果没有匹配的logger,最终会走到Root,即使匹配到了一个Logger,没有配置additivity,也会走到Root。
additivity="false"
表示该Logger处理过该日志了,其他Logger不必处理了。示例如下
<Loggers>
<Logger name="com.foo.Bar" level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
- 日志文件按时间切分
TimeBasedTriggeringPolicy
,按文件大小切分SizeBasedTriggeringPolicy
。只要满足其中一个条件便会切分文件
日志常见问题
- 包冲突问题/包版本问题导致打印不出日志。缺少类,缺少方法等异常。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to console.
找不到配置文件,log4j的配置文件一般需要放在resources/log4j2.xml。- 某些jar包会将日志包直接打包起来,排除比较麻烦
- 注意适配层包和桥接包一起使用时导致的死循环问题。
Class path contains multiple SLF4J bindings
表示有多个SLF4J的实现,需要排除至只剩一个。否则会出现诡异的问题