Log4j2没有记录到文件

时间:2015-12-21 17:23:22

标签: java xml log4j2

我在我的应用程序中使用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());
}

在初始化位之后,我开始在整个应用程序的各个点进行记录。

2 个答案:

答案 0 :(得分:1)

我怀疑你获取LoggerContext的调用导致Log4j初始化。您应该看到一条消息,指出正在使用默认配置。为什么不直接使用Configurator.initialize()方法之一?

答案 1 :(得分:-1)

也许LOG4J2正在缓冲您的日志消息,稍后会写入它们。 您是否尝试过关闭应用服务器? 这将强制将任何缓冲的消息写入文件。