Java Log4j2创建不需要的日志文件

Java Log4j2创建不需要的日志文件,java,logging,configuration,log4j,log4j2,Java,Logging,Configuration,Log4j,Log4j2,我想设置日志级别、文件名和日志文件的文件路径。我找到了一种方法来实现这一点,除了log4j创建一个附加的日志文件外,其他方法都可以实现。 我得到了以下log4j2.xml: <?xml version="1.0" encoding="UTF-8"?> <Configuration status="OFF"> <Appenders> <File name="logFile" filename="${sys:logDir}${

我想设置日志级别、文件名和日志文件的文件路径。我找到了一种方法来实现这一点,除了log4j创建一个附加的日志文件外,其他方法都可以实现。 我得到了以下log4j2.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Appenders>
        <File name="logFile" filename="${sys:logDir}${sys:logFilename}" >
            <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
        </File>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="logFile" />
        </Root>
    </Loggers>
</Configuration>
它像我想要的那样工作,但是log4j在我的主项目路径中创建了一个名为“${sys:logDir}${sys:logFilename}”的文件。为什么log4j2要这样做?我猜在我设置名称之前,它会初始化日志文件。我怎样才能改变它

亲切问候

我可以用以下主要方法解决这个问题:

public class main {


    public static void main(String [] args) throws IOException {
        ReadParameterFile config = new ReadParameterFile();

        System.setProperty("logDir",config.getProtokollDirProtokoll());
        System.setProperty("logFilename", config.getProtokollDateinameProtokoll());
        switch (config.getProtokollProtokollTiefe()){
            case "Default":System.setProperty("logLvl","DEBUG");
                break;
            case "Produktion":System.setProperty("logLvl","ERROR");
                break;
            case "Test": System.setProperty("logLvl","ALL");
                break;
            default:System.out.print("falsche Logtief");
        }

    }

}

记录器被声明为静态字段。在调用
main
方法之前,当类被加载时,它被初始化

LogManager
的第一次调用应在设置这些系统属性之后进行。 您可以在设置属性后初始化记录器,也可以在命令行上使用
-D
选项设置属性

您需要执行以下操作:

private static ReadParameterFile config;
private static Logger log;
static {
    config = new ReadParameterFile();
    System.setProperty("logDir",config.getProtokollDirProtokoll());
    System.setProperty("logFilename", config.getProtokollDateinameProtokoll());
    log = LogManager.getLogger(main.class);
}

尝试删除私有最终静态记录器log=LogManager.getLogger(main.class)?您使用的是
滚动文件
,这意味着新文件将在文件模式定义的特定时间点创建,或者如果文件超过了
SizeBaseTriggeringPolicy
定义的大小。查看有关配置的更多信息:@Aris2World嘿,是的,我已经试过了。仍然有错误的文件。@Rafal嘿,我更改了log4j2.xml文件。但仍然得到了错误的文件。你知道我如何解决这个问题吗?每个对LogManager的引用都会初始化记录器。你必须改变方法。
private static ReadParameterFile config;
private static Logger log;
static {
    config = new ReadParameterFile();
    System.setProperty("logDir",config.getProtokollDirProtokoll());
    System.setProperty("logFilename", config.getProtokollDateinameProtokoll());
    log = LogManager.getLogger(main.class);
}