log4j2.xml配置详解

本文详细解析log4j2.xml配置,包括日志级别设置、打印参数配置及常见问题解决,如日志无法输出和日志级别错误。针对无法输出日志,可能原因涉及文件路径和jar包冲突;日志级别配置错误,则是缺少特定标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关文章链接:

相关文章链接 第3节 日志配置

观前提示:

本文所使用的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 无法输出日志

可能的原因如下

  1. log4j2.xml文件默认路径为src目录下,如果想要放到其他目录,需要进行配置

  2. 可能是引入不正确的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>

输出日志级别正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值