在我的 Storm 应用程序中,每次运行时,我现在都会从控制台获取这些行:
2018-01-17 18:38:30,417 main DEBUG Initializing configuration XmlConfiguration[location=D:Desarrolloworkspacesoxygen_mainStormAcustattargetclasseslog4j2.xml]
2018-01-17 18:38:30,426 main DEBUG Installed script engines
2018-01-17 18:38:31,172 main DEBUG Oracle Nashorn Version: 1.8.0_144, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript}
2018-01-17 18:38:31,172 main DEBUG PluginManager 'Core' found 112 plugins
2018-01-17 18:38:31,173 main DEBUG PluginManager 'Level' found 0 plugins
2018-01-17 18:38:31,185 main DEBUG PluginManager 'Lookup' found 13 plugins
2018-01-17 18:38:31,189 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2018-01-17 18:38:31,214 main DEBUG PluginManager 'TypeConverter' found 26 plugins
2018-01-17 18:38:31,255 main DEBUG PatternLayout$Builder(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", PatternSelector=null, Configuration(D:Desarrolloworkspacesoxygen_mainStormAcustattargetclasseslog4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2018-01-17 18:38:31,255 main DEBUG PluginManager 'Converter' found 41 plugins
2018-01-17 18:38:31,259 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2018-01-17 18:38:31,282 main DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), name="Console", Configuration(D:Desarrolloworkspacesoxygen_mainStormAcustattargetclasseslog4j2.xml), Filter=null)
2018-01-17 18:38:31,283 main DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2018-01-17 18:38:31,284 main DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
我已经配置了log4j2.xml
,使 Storm 将其日志重定向到不同的日志文件中,并且它正在工作:
<Loggers>
<Logger name="org.apache.storm" level="debug" additivity="false">
<AppenderRef ref="Storm"/>
</Logger>
<Logger name="org.apache.storm.kafka" level="debug" additivity="false">
<AppenderRef ref="Storm-Kafka"/>
</Logger>
<Logger name="org.apache.zookeeper" level="debug" additivity="false">
<AppenderRef ref="ZooKeeper"/>
</Logger>
<Logger name="org.apache.storm.shade.org.apache.zookeeper" level="debug" additivity="false">
<AppenderRef ref="Storm-ZooKeeper"/>
</Logger>
<Logger name="TestMain" level="info">
<AppenderRef ref="TestMain"/>
</Logger>
<!-- these lines don't work -->
<Logger name="org.apache.logging.log4j" level="info">
<AppenderRef ref="Storm-logging"/>
</Logger>
<Root level="OFF">
<AppenderRef ref="Console" />
</Root>
</Loggers>
但我仍然从控制台获取这些日志。我想用log4j
或log4j2
配置来消除它。
我检查了日志,发现这些日志似乎来自org.apache.logging.log4j
本身,而不是来自任何其他 Storm 类,因为org.apache.storm
、org.apache.storm.kafka
等的日志文件不包含这些行,并检查源代码,PluginManager {} found {} plugins
在类中看到:
org.apache.logging.log4j.core.config.plugins.util.PluginManager.class
它位于依赖项之一中,log4j-core-2.8.2.jar
.
因此,控制台似乎打印了log4j
的日志,而不是来自 Storm。
如何预防?如您所见,我已经关闭了根记录器,并且有以下行,但它们不起作用:
<Logger name="org.apache.logging.log4j" level="info">
<AppenderRef ref="Storm-logging"/>
</Logger>
编辑:我的log4j2.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingFile name="TestMain" fileName="D:ProyectosStormtestTestMain.log" filePattern="D:ProyectosStormtestTestMain.%d{yyyy-MM-dd}.log"
bufferedIO="true" immediateFlush="true" append="true" ignoreExceptions="false"> <!-- bufferedIO: large performance improvement -->
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="Storm" fileName="D:ProyectosStormtestStorm.log" filePattern="D:ProyectosStormtestStorm.%d{yyyy-MM-dd}.log"
bufferedIO="true" immediateFlush="true" append="true" ignoreExceptions="false"> <!-- bufferedIO: large performance improvement -->
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="Storm-Kafka" fileName="D:ProyectosStormtestStorm-Kafka.log" filePattern="D:ProyectosStormtestStorm-Kafka.%d{yyyy-MM-dd}.log"
bufferedIO="true" immediateFlush="true" append="true" ignoreExceptions="false"> <!-- bufferedIO: large performance improvement -->
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="ZooKeeper" fileName="D:ProyectosStormtestZooKeeper.log" filePattern="D:ProyectosStormtestZooKeeper.%d{yyyy-MM-dd}.log"
bufferedIO="true" immediateFlush="true" append="true" ignoreExceptions="false"> <!-- bufferedIO: large performance improvement -->
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="Storm-ZooKeeper" fileName="D:ProyectosStormtestStorm-ZooKeeper.log" filePattern="D:ProyectosStormtestStorm-ZooKeeper.%d{yyyy-MM-dd}.log"
bufferedIO="true" immediateFlush="true" append="true" ignoreExceptions="false"> <!-- bufferedIO: large performance improvement -->
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="Storm-logging" fileName="D:ProyectosStormtestStorm-logging.log" filePattern="D:ProyectosStormtestStorm-logging.%d{yyyy-MM-dd}.log"
bufferedIO="true" immediateFlush="true" append="true" ignoreExceptions="false"> <!-- bufferedIO: large performance improvement -->
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="org.apache.storm" level="debug" additivity="false">
<AppenderRef ref="Storm"/>
</Logger>
<Logger name="org.apache.storm.kafka" level="debug" additivity="false">
<AppenderRef ref="Storm-Kafka"/>
</Logger>
<Logger name="org.apache.zookeeper" level="debug" additivity="false">
<AppenderRef ref="ZooKeeper"/>
</Logger>
<Logger name="org.apache.storm.shade.org.apache.zookeeper" level="debug" additivity="false">
<AppenderRef ref="Storm-ZooKeeper"/>
</Logger>
<Logger name="TestMain" level="info">
<AppenderRef ref="TestMain"/>
</Logger>
<Logger name="org.apache.logging.log4j" level="info">
<AppenderRef ref="Storm-logging"/>
</Logger>
<Root level="OFF">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
正在打印的日志是log4j2
的,因为您已启用debug
log4j2
的日志记录。
要关闭此详细日志记录,请将配置中Configuration
元素的属性更改为warn
或error
status
-
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
...
其余部分应保持不变。
Log4j2 文档详细描述了此日志记录 -
从log4j-2.9开始
从 log4j-2.9 开始,log4j2 会将所有内部日志记录打印到 控制台(如果定义了系统属性
log4j2.debug
(使用任何或否) 值)。log4j-2.9 之前
在 log4j-2.9 之前,有两个地方可以进行内部日志记录 控制:
如果正确找到配置文件,log4j2 内部状态 可以通过设置
<Configuration status="trace">
来控制日志记录 配置文件。这将显示详细的日志4j2-内部日志 控制台上关于配置期间发生的情况的语句 过程。这对于解决配置问题可能很有用。由 默认情况下,状态记录器级别为 WARN,因此您只能看到通知 当出现问题时。如果未正确找到配置文件,您仍然可以启用 通过设置系统属性记录 log4j2 内部状态
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
.