log4j2中<logger>中没有指定appender的输出

一 优先级

1.1 规则

1.如果一个 <logger> 没有显式配置 appender,Log4j2 会将该日志事件传递给其 父 Logger 的 appender

2.这种传递行为会一直向上追溯,直到找到配置了 appender 的 Logger,或者到达 Root Logger

3.如果日志事件最终传递到 Root Logger,并且 Root Logger 配置了 appender,则日志会输出到 Root Logger 的 appender

4.如果 Root Logger 也没有配置 appender,则日志事件会被丢弃(即不会有任何输出)

1.2 案例说明

com.example Logger 没有指定 appender,因此它的日志事件会传递给 Root Logger。

Root Logger 配置了 ConsoleAppender,因此日志会输出到控制台。

1.3 结论

  • 如果 <logger> 没有指定 appender,日志事件会传递给其父 Logger。

  • 如果父 Logger 也没有 appender,日志事件会继续向上传递,直到 Root Logger。

  • 如果 Root Logger 也没有 appender,则日志事件会被丢弃。

  • 通过 additivity 属性可以控制是否将日志事件传递给父 Logger。

1.4  场景描述

如图:

Logger 未指定 appender,且 additivity="false"日志事件被丢弃,不会有任何输出。

1.5  additivity作用 

1.additivity 属性控制日志事件是否传递给父 Logger

additivity="true"(默认值):日志事件会传递给父 Logger。

additivity="false":日志事件不会传递给父 Logger

如果 additivity="false",且当前 Logger 没有配置 appender,则日志事件会被丢弃。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %n%m%n" /> </layout> </appender> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="file" value="d:/jboss/jboss-as/server/oa/deploy/defaultroot.war/WEB-INF/logs/whirlog.log" /> <param name="append" value="true" /> <param name="maxFileSize" value="1MB" /> <param name="maxBackupIndex" value="10" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %C{6} (%F:%L) - %m%n" /> </layout> </appender> <!-- appender name="framework" class="com.deppon.foss.framework.server.components.logger.BufferedAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" /> </layout> </appender--> <!-- 下面是打印mybatis语句的配置--> <logger name="opensymphony.xwork2.util.logging.commons.CommonsLogger" additivity="true"> <level value="ERROR" /> </logger> <logger name="com.ibatis" additivity="true"> <level value="ERROR" /> </logger> <logger name="com.mybatis" additivity="true"> <level value="ERROR" /> </logger> <logger name="java.sql.Connection" additivity="true"> <level value="ERROR" /> </logger> <logger name="java.sql.Statement" additivity="true"> <level value="ERROR" /> </logger> <logger name="java.sql.PreparedStatement" additivity="true"> <level value="ERROR" /> </logger> <logger name="java.sql.ResultSet" additivity="true"> <level value="ERROR" /> </logger> <logger name="net.sf.hibernate" additivity="true"> <level value="ERROR" /> </logger> <logger name="org.apache.commons" additivity="true"> <level value="ERROR" /> </logger> <logger name="com.opensymphony.xwork2" additivity="true"> <level value="ERROR" /> </logger> <logger name="opensymphony.xwork2" additivity="true"> <level value="ERROR" /> </logger> <logger name="com.opensymphony" additivity="true"> <level value="ERROR" /> </logger> <logger name="freemarker.log" additivity="true"> <level value="ERROR" /> </logger> <logger name="org.apache.struts" additivity="true"> <level value="ERROR" /> </logger> <logger name="opensymphony" additivity="true"> <level value="ERROR" /> </logger> <logger name="com.whir" additivity="true"> <level value="ERROR" /> </logger> <logger name="org.activiti" additivity="true"> <level value="ERROR" /> </logger> <root> <level value="ERROR" /> <!-- <appender-ref ref="CONSOLE" /> --> <appender-ref ref="FILE" /> </root> </log4j:configuration> 这个是只打印错误信息码?
08-21
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志存放路径 --> <property name="log.path" value="/home/ruoyi/logs" /> <!-- 日志输出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系统日志输出 --> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-info.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-error.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>ERROR</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 用户访问日志输出 --> <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-user.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按天回滚 daily --> <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系统模块日志级别控制 --> <logger name="com.ruoyi" level="info" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> <root level="info"> <appender-ref ref="console" /> </root> <!--系统操作日志--> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> <!--系统用户操作日志--> <logger name="sys-user" level="info"> <appender-ref ref="sys-user"/> </logger> </configuration> 解释下这个日志 会产生什么效果
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值