我在我的应用程序中使用Log4j2,它似乎加载并初始化正常。 控制台被记录,2个指定的文件追加器创建各自的文件,但这些文件保持空白!
我的配置有问题吗?我是否以错误的方式启动Log4j2?
这是配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
<Appenders>
<File name="file" fileName="${sys:logdir}ftm.log">
<PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
<File name="file_error" fileName="${sys:logdir}ftm_error.log">
<PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="file" level="ALL"/>
<AppenderRef ref="STDOUT" level="ALL"/>
</Root>
<Logger name="FTM" level="ALL" additivity="true">
<AppenderRef ref="file_error" level="ERROR"/>
</Logger>
</Loggers>
</Configuration>
这是代码:
LoggerContext contextLogging = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
File file = new File("log4j2.xml");
if (file != null && file.isFile() && file.canRead()){
contextLogging.setConfigLocation(file.toURI());
}
在初始化位之后,我开始在整个应用程序的各个点进行记录。
答案 0 :(得分:1)
我怀疑你获取LoggerContext的调用导致Log4j初始化。您应该看到一条消息,指出正在使用默认配置。为什么不直接使用Configurator.initialize()方法之一?
答案 1 :(得分:-1)
也许LOG4J2正在缓冲您的日志消息,稍后会写入它们。 您是否尝试过关闭应用服务器? 这将强制将任何缓冲的消息写入文件。