log4j2.xml创建文件,但不在文件中输出任何内容

时间:2014-07-15 16:37:32

标签: java xml log4j2

我有一个log4j2.xml文件和一个类,我正在尝试使用这两个来测试日志记录,但无法打印到我输出的文件。我的log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    </Console>
    <File name="MyFile" fileName="C:\Tomcat\logs\all.log" immediateFlush="false"      
    append="false">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - 
    %msg%n"/>
    </File>
</Appenders>
<Loggers>
    <Root level="debug">
        <AppenderRef ref="Console" level="info" />
        <AppenderRef ref="MyFile" level="info"/>
    </Root>
</Loggers>
</Configuration>

我的程序是以下代码:

public class LoggingTest {

Logger testLog = LogManager.getLogger("Log_File");


public String setString(String test)
{   
    if (test=="warn")
    {
        testLog.warn("Error");
        return "no";
    }
    else
        testLog.info("Complete");
    return "yes";
}

/**
 * @param args
 */
public static void main(String[] args) {
    LoggingTest a=new LoggingTest();
    System.out.println(a.setString("warn"));
    }
}

我的日志记录打印到控制台没有问题,并在正确的位置创建日志文件,但没有文本写入日志文件。什么可能导致这个?与我的log4j2.xml文件有关的东西?

1 个答案:

答案 0 :(得分:1)

问题是您为appender设置了immediateFlush="false"。这意味着日志输出不会立即添加到文件中,而是添加到缓冲区中,等待缓冲区填满。一旦缓冲区填满,数据就会一下子写入文件。这种方法的优点是它比多个小文件写入更快。您遇到的一个缺点是您无法实时监控日志。另一件需要担心的是,如果您的应用程序意外停止,缓冲区中的日志数据可能会丢失。