log4j2.xml配置详解
相关文章链接:
观前提示:
本文所使用的IDEA版本为ultimate 2019.1,JDK版本为1.8.0_141,Tomcat版本为9.0.12。
1.配置详解
1.1日志级别
可参考 相关文章链接 第3节 日志配置 第1点 log4j.xml配置详解
1.2 打印参数
可参考 相关文章链接 第3节 日志配置 第1点 log4j.xml配置详解
1.3 实际例子
参考的详细配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
<!--status="WARN" :用于设置log4j2自身内部日志的信息输出级别,默认是OFF-->
<Configuration status="WARN" monitorInterval="30">
<!--自定义一些常量,之后使用${变量名}引用-->
<properties>
<property name="LOG_PATH">D:/logs</property>
<property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%l] %p - %m%n%n"/>
<property name="INFO_LOG">info</property>
<property name="DEBUG_LOG">debug</property>
<property name="ERROR_LOG">error</property>
</properties>
<!--appenders:定义输出内容,输出格式,输出方式,日志保存策略等,常用其下三种标签[console,File,RollingFile]-->
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingFile name="DebugAppender" fileName="${LOG_PATH}/${DEBUG_LOG}.log"
filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<Filters>
<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${PATTERN}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20" />
</RollingFile>
<RollingFile name="InfoAppender" fileName="${LOG_PATH}/${INFO_LOG}.log"
filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${PATTERN}" />
<Policies>
<TimeBasedTriggeringPolicy />
<!-- SizeBasedTriggeringPolicy :文件大小滚动策略-->
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20" />
</RollingFile>
<RollingFile name="ErrorAppender" fileName="${LOG_PATH}/${ERROR_LOG}.log"
filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<Filters>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${PATTERN}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20" />
</RollingFile>
</Appenders>
<!--定义logger,只有定义了logger并引入的appender,appender才会生效-->
<Loggers>
<!--Logger节点用来单独指定日志的形式,name为包路径,比如要为org.springframework包下所有日志指定为ERROR级别等。 -->
<logger name="org.apache.ibatis" additivity="false" level="ERROR" />
<logger name="org.apache.shiro" additivity="false" level="ERROR" />
<logger name="net.sf.ehcache" additivity="false" level="ERROR" />
<logger name="org.apache.commons" additivity="false" level="ERROR" />
<logger name="org.mybatis.spring" additivity="false" level="ERROR" />
<logger name="java.sql" additivity="false" level="ERROR" />
<logger name="org.springframework" additivity="false" level="ERROR" />
<logger name="com.alibaba.druid.filter.stat" additivity="false" level="WARN" />
<logger name="com.alibaba.druid.pool" additivity="false" level="WARN" />
<logger name="druid.sql.Connection" additivity="false" level="WARN" />
<logger name="druid.sql.DataSource" additivity="false" level="WARN" />
<logger name="druid.sql.ResultSet" additivity="false" level="WARN" />
<logger name="druid.sql.Statement" additivity="false" level="WARN" />
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<Root level="DEBUG">
<AppenderRef ref="Console" />
<AppenderRef ref="DebugAppender" />
<AppenderRef ref="InfoAppender" />
<AppenderRef ref="ErrorAppender" />
</Root>
</Loggers>
</Configuration>
2.可能出现的问题
2.1 无法输出日志
可能的原因如下
-
log4j2.xml文件默认路径为src目录下,如果想要放到其他目录,需要进行配置
-
可能是引入不正确的jar包导致冲突,slf4j与log4j2的桥接包是
log4j-slf4j-impl
,而slf4j与log4j的桥接包是slf4j-log4j12
,需要重点注意,同时引入会导致冲突
2.2 输出的日志级别不正确
这个是我项目中实际遇到的问题,配置只输出INFO级别的日志,却输入了其他级别的日志,原配置如下
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
最后发现是少了一个·Filters
标签,修改后如下
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
输出日志级别正常