gpt4 book ai didi

java - 动态更改 Log4j 文件名

转载 作者:行者123 更新时间:2023-12-01 11:57:57 25 4
gpt4 key购买 nike

我正在我的项目中实现 Log4j。我想将每 n 个(比如 10)个日志条目记录到新文件中。我尝试使用“RollingFileAppender”,但我认为它只会根据大小和时间更改日志文件。

到目前为止我做了下面的代码:

log4j.properties

log4j.logger.ControlTable=debug, controlTable
log4j.additivity.ControlTable = false
log4j.appender.controlTable=org.apache.log4j.RollingFileAppender
log4j.appender.controlTable.File=${log4jfilename}
log4j.appender.controlTable.MaxFileSize=10MB
log4j.appender.controlTable.MaxBackupIndex=10
log4j.appender.controlTable.layout=org.apache.log4j.PatternLayout

主要

public class ControlTableLoggerConsumer {
static {
System.setProperty("log4jfilename","d:\\control_log_1_9.json");
}
private static final Logger log = Logger.getLogger("ControlTable");
private static long logEntries = 0;
public static void main(String args[]) {
System.out.println("Curr log file:"+logEntries+"::"+System.getProperty("log4jfilename"));
log.info("Log entry:"+logEntries);
logEntries++;
if((logEntries >= 10) && ((logEntries % 10) == 0)) {
System.out.println("going to change file name to "+"d:\\control_log_"+logEntries+"_"+(logEntries+9)+".json");
System.setProperty("log4jfilename","d:\\control_log_"+logEntries+"_"+(logEntries+9)+".json");
}
if(logEntries == 1000)
break;
}

在控制台上,我可以看到文件名每 10 个条目发生变化,但在我的 D 驱动器中,我只能看到一个包含所有日志信息的文件。

最佳答案

最后我解决了这个问题,如下。

Properties props = new Properties(); 
try {
InputStream configStream = getClass().getResourceAsStream("/log4j.properties");
props.load(configStream);
configStream.close();
} catch (IOException e) {
System.out.println("Errornot laod configuration file ");
}
props.setProperty("log4j.appender.controlTable.File", logFile);
LogManager.resetConfiguration();
PropertyConfigurator.configure(props);

现在我可以动态登录到不同的文件。希望它也能帮助其他人。

关于java - 动态更改 Log4j 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com