在有人将这个问题作为重复出现之前,请听我说......我已经阅读了无数博客文章,教程,常见问题和SO问题,现在我已经阅读了为什么我得到了这种特定的行为。
我的log4j2.xml
配置文件包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="APP_NAME">MyCoolApp</Property>
<Property name="BASE_PACKAGE">my.cool.package</Property>
<Property name="LOG_DIR">${env:LOG_ROOT:-logs}</Property>
<Property name="LOG_PATTERN">%d [%t] %-5level %c{1.}:%L:%M | %m%n</Property>
</Properties>
<Appenders>
<RollingFile name="AppLogFile" fileName="${LOG_DIR}/${APP_NAME}.log" filePattern="${LOG_DIR}/archive/${APP_NAME}.%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<TimeBasedTriggeringPolicy/>
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
</Appenders>
<Loggers>
<Logger name="${BASE_PACKAGE}" level="INFO">
<AppenderRef ref="AppLogFile"/>
</Logger>
<Root level="TRACE">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
然后每个类使用private static final Logger LOGGER = LogManager.getLogger();
初始化记录器。
根据我对日志级别,记录器和追加器的理解,这应该给我以下内容:
INFO
及更高级别的日志记录输出到文件TRACE
及更高级别的日志输出到控制台同时,如果我在启用AppLogFile
appender时运行应用程序,则控制台的输出会减少;仅在Log4j初始化之后计数,我获得255行而不是367。
查看控制台和文件输出,当AppLogFile
appender启用时,我不会获得任何TRACE
或DEBUG
输出,只有INFO
和更高。当我只注释掉那个appender(没有更改任何其他内容)时,我会把所有内容都安排到控制台,包括TRACE
和DEBUG
。
我试过重新安排&#34;控制台&#34;和&#34;文件&#34;相关元素,我尝试明确启用和禁用记录器的additivity
属性,我尝试在appender和logger中使用过滤器,甚至在一个记录器中使用显式的多个appender引用level
属性。
我想要的只是让所有内容都转到控制台,所有INFO
级别和更高级别都可以转到文件。我在这里错过了什么..?
答案 0 :(得分:1)
tournament
属性和level
元素完全独立:
指定<AppenderRef>
更改给定记录器和所有子记录器的记录级别。
指定level
将 1 另一个appender添加到给定的记录器和所有子记录器。
同时执行这两项操作的事实不会影响这些独立效果。
如果您想限制Appender的日志条目,请改为指定<AppenderRef>
上的level
属性。
1)如果您希望Appender 替换,您需要指定<AppenderRef>
(OP编辑)为了清楚起见,我从这个答案和Log4j2 FAQ中学到了什么;我简化了一些事情并最终得到了以下
additivity="false"
配置:
<Loggers>