我对log4j很新,并设法为我的代码创建日志。 但我需要的是,为每次运行创建一个新文件,而不是将日志附加到同一个文件。
以下是我设置的属性(在谷歌的某个地方找到)。 请建议更改,以便在每次运行后使用时间戳创建新文件。
// Here we have defined root logger
log4j.rootLogger=INFO,R,HTML
// Here we define the appender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.HTML=org.apache.log4j.FileAppender
// Here we define log file location
log4j.appender.R.File=./Logs/LastRunLog.log
log4j.appender.HTML.File=./Logs/LastRunLog.html
// Here we define the layout and pattern
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d - %c -%p - %m%n
log4j.appender.HTML.layout=org.apache.log4j.HTMLLayout
log4j.appender.HTML.layout.Title=Application log
log4j.appender.HTML.layout.LocationInfo=true
答案 0 :(得分:0)
您需要编写(或查找)自定义appender,它将创建名称中带有时间戳的文件。 log4j中文件记录的3个默认实现是:
FileAppender
:一个文件记录,没有大小限制。RollingFileAppender
:当前文件达到大小限制时的多个文件和滚动文件DailyRollingFileAppender
:每天一个文件最简单的方法是扩展FileAppender
并覆盖setFile
和getFile
方法。
答案 1 :(得分:0)
您可以使用系统属性设置log4j文件名及其值,并为每次运行赋予该属性唯一值。
你的入门级上有类似的东西(timeInMillis和随机的,以避免名称冲突):
static {
long millis = System.currentTimeMillis();
System.setProperty("log4jFileName", millis+"-"+Math.round(Math.random()*1000));
}
然后在log4j conf属性中引用系统属性:
log4j.appender.R.File=./Logs/${log4jFileName}.log
log4j.appender.HTML.File=./Logs/${log4jFileName}.log
希望它有所帮助!
答案 2 :(得分:0)
我认为这个答案对你有用click here
我按照页面说的那样运行了代码,每次启动应用程序时都会收到一个新的日志文件。
我的Test.java中的所有代码都是:`
private static final Logger log = Logger.getLogger(Test.class);
public static void main(String[] args) {
log.info("Hello World");
}
`