读取log4j.xml后如何设置log4j 2.x输出路径

How to set log4j 2.x output path after reading in log4j.xml

假设我在下面的 log4j.xml 文件中定义了一个 appender。

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="File" value="/home/logs/oarm_log.txt" />
            <param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
            <layout class="org.apache.log4j.PatternLayout">
                 <param name="ConversionPattern" value="%d %-5p[app=%log4j.webapp.name%] [%t] %c - %m\n" />
            </layout>
    </appender>

如何将值 "/home/logs/oarm_log.txt" 更改为来自实际 Java 代码中的字符串的不同值,以便代码确定输出 .txt 文件的位置?

虽然您最好的首选资源是 Log4j 的 official documentation,但我将列出另外两个可以帮助您的参考资料。

Baeldung 是我最喜欢的 Java 博客之一。你可以通过 this article.

你也可以参考这个Whosebug answer

如果你赶时间,请看下面的代码片段。

        final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
        final Configuration config = ctx.getConfiguration();
        final Layout layout = PatternLayout.createDefaultLayout(config);
        Appender appender = FileAppender.createAppender("path/to/logFile.log", "false", "false", "File", "true",
            "false", "false", "4000", layout, null, "false", null, config);
        appender.start();
        config.addAppender(appender);
        AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
        AppenderRef[] refs = new AppenderRef[] {ref};
        LoggerConfig loggerConfig = LoggerConfig.createLogger("false", "info", "org.apache.logging.log4j",
            "true", refs, null, config, null );
        loggerConfig.addAppender(appender, null, null);
        config.addLogger("org.apache.logging.log4j", loggerConfig);
        ctx.updateLoggers();