为什么 log4j 在我的 Java 应用程序中而不是在我的 Web 应用程序中创建日志文件?

Why does log4j create the logfile in my Java application but not in my web application?

我测试过这个配置

# Define the root logger with appender file
log4j.rootLogger = DEBUG, CONSOLE, FILE

# CONSOLE appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.conversionPattern=%m%n
log4j.appender.CONSOLE.Threshold=debug

# FILE appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

# Set the name of the file
log4j.appender.FILE.File=/home/user/annotator-log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=info

# Set the append to false, overwrite
log4j.appender.FILE.Append=false

使用这个简单的 Main.java

package playground;

import org.apache.log4j.Logger;

public class Main {

    private final static Logger LOGGER = Logger.getLogger(Main.class.getName());

    public static void main(String[] args) {

        LOGGER.info("Running main ..");

        LOGGER.debug("Reading args:");

        for (String arg : args) {
            LOGGER.debug("    " + arg);
        }       

        LOGGER.info("All done.");
    }

}

并且有效。日志记录被打印到控制台,文件被创建在 /home/user/annotator-log.out

但是,如果我将 .properties 文件放入我的 Web 应用程序中,我只能在控制台中看到输出,但不会创建日志文件。

这可能是什么原因?

尝试将其放入您的 web.xml。

<context-param>
        <param-name>log4j-config-location</param-name>
        <param-value>WEB-INF/log4j.properties</param-value>
    </context-param>

程序化解决方案:

String log4jPropertiesFilePath = ...;
org.apache.log4j.PropertyConfigurator.configure(log4jPropertiesFilePath);

当我们只能在运行时知道文件位置时,我们使用它!