Java Log4j2创建不需要的日志文件
我想设置日志级别、文件名和日志文件的文件路径。我找到了一种方法来实现这一点,除了log4j创建一个附加的日志文件外,其他方法都可以实现。 我得到了以下log4j2.xml: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}${
<?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);
}