log4j2 配置简要分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j2 配置简要分析相关的知识,希望对你有一定的参考价值。
参考技术A 对于做后端的同学来说,log是分析bug、查找问题不可或缺的工具,好的日志配置将使我们的开发工作如虎添翼。 把视线聚焦到java,常用的日志工具有log4j,log4j2以及logback等,其中log4j2功能较为强大,运行效率也较高,我们就来用一个例子看一看log4j2的配置思路,下面就是这个配置文件:我们看到,Configuration有2个属性status和monitorInterval,它们分别是log4j2自身组件的日志级别以及重新刷新配置文件的时间,通过配置status可以看到log4j2相关的日志,配置monitorInterval可以通过修改配置文件来改变日志配置。
从上面的log4j2.xml配置文件中,我们可以看到log4j2的配置文件中主要分为2块,一块为appender,描述了如何记录日志,另外一部分是log config,记录了哪种日志对应哪种级别。 而不同的LogConfig之间其实是有继承关系的,子LogConfig会继承parent的属性,而所有LogConfig都继承自Root LogConfig。所以即使只配置了root logger,你一样可以在任何地方通过LoggerFactory.getLogger获取一个logger对象,记录日志。
那么日志之间的继承关系是由什么决定的呢?看看上面的配置文件中root以外的2个logConfig,只有3个配置:日志级别,name以及appender,从直觉上看应当是name最可能决定了LogConfig的继承关系,其实也正是如此:com.foo是com.foo.Bar的父级;java是java.util的父级,是java.util.vector的祖先(注意name区分大小写)。
理解了这一点,我们就能理清log4j2配置的思路:先配置一个root,让所有需要使用日志的logger继承,然后对有特别需要的logger进行特殊的配置,比如我们希望 org.springframework 包只记录error以及warn级别的log,再比如,我们希望能显示mybatis执行的sql的日志,都可以进行个性化的配置。
appender是LogConfig的重要组成部分,一个LogConfig可以使用多个appender,一个appender也可以被多个LogConfig使用,appender多种多样,不同的appender也有不同的属性和配置,难以一一阐述,需要使用时可以直接查看文档来进行个性化配置。不过就filters可以单独拿出来讨论一下。filter有两个重要属性 onMatch 和 onMismatch 。可以有DENY、ACCEPT或NEUTRAL配置,DENY说明不由当前appender处理,ACCEPT说明由当前filter处理,而NEUTRAL说明如果按顺序还有其他filter则由其他filter处理,如果当前filter已经是最后一个filter,则由当前appender处理。
log4j2的官方文档建议记录程序行为日志异步日志,效率更高。因为异步日志使用的是无锁技术,所以需要引入 Disruptor 。然后可以通过配置异步的appender或Logger来实现异步日志:
或
动态修改日志级别是一个很实用的功能,关于如果动态修改日志级别,请参考美团的一篇文章: 日志级别动态调整——小工具解决大问题
以上就是对log4j2的配置的一些总结,更多信息请关注官方文档。
以上是关于log4j2 配置简要分析的主要内容,如果未能解决你的问题,请参考以下文章