log4j2从xml配置文件中获取appender并动态地给它一个要写入的文件

ejk8hzay  于 2021-07-07  发布在  Java
关注(0)|答案(0)|浏览(396)

我使用的是log4jv.1,我想升级到log4jv.2。我有一个函数,可以检查是否也要登录到一个文件,如果是这样,我将使用log4j.xml文件中的fa appender,并选择一个文件。然后登录。我的log4j.xml文件:

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="false">

    <appender name="CA" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="INFO"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{ISO8601} %-5p] %m%n"/>
        </layout>
    </appender>

    <appender name="FA" class="org.apache.log4j.RollingFileAppender">
        <param name="Threshold" value="TRACE"/>
        <param name="maxBackupIndex" value="10"/>
        <param name="maxFileSize" value="10MB"/>
        <param name="append" value="true"/>
        <param name="file" value="${cliLogPath}.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} [%t] (%F:%L) %-5p - %m%n"/>
        </layout>
    </appender>

    <category name="org.apache.http">
        <priority value="WARN"/>
    </category>

    <category name="org.apache.cxf">
        <priority value="ERROR"/>
    </category>

    <category name="org.springframework">
        <priority value="ERROR"/>
    </category>

    <category name="org.whitesource.agent">
        <priority value="ERROR"/>
    </category>

    <root>
        <level value="TRACE"/>
        <appender-ref ref="FA"/>
        <appender-ref ref="CA"/>
    </root>

</log4j:configuration>

在代码中,我是这样处理的:

private static void initLogging(CommandLine commandLine) throws CLIParsingException {
        String logPath = commandLine.getOptionValue(LOG_PATH, "." + File.separator + "logs" + File.separator + "logfile.log");
        File logFile = new File(logPath);
        DOMConfigurator.configure("." + File.separator + "log4j.xml");
        try {
            if (!logFile.exists()) {
                Files.createParentDirs(logFile);
                Files.touch(logFile);
            }
            Writer writer = new FileWriter(logPath);
            Appender faAppender = org.apache.log4j.Logger.getRootLogger().getAppender("FA");
            if (commandLine.hasOption(Parameters.VERBOSE)) {
                ((RollingFileAppender) faAppender).setThreshold(Level.TRACE);
            }
            ((RollingFileAppender) faAppender).setWriter(writer);
            log.info("[CxConsole] Log file location: " + logPath);
        } catch (IOException e) {
            throw new CLIParsingException("error creating log file", e);
        }
    }

但是我在log4j2中找不到这样做的方法。我想创建一个文件附加器,我可以给它一个日志文件的位置在运行时,并能够记录到该文件,在相同的格式,配置在log4j.xml任何帮助将不胜感激

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题