Log4j 属性 |为每次运行创建带有时间戳的新日志文件[重复]

Posted

技术标签:

【中文标题】Log4j 属性 |为每次运行创建带有时间戳的新日志文件[重复]【英文标题】:Log4j properties | Create new log file with timestamp for every run [duplicate] 【发布时间】:2017-11-28 22:45:09 【问题描述】:

我对 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

【问题讨论】:

这可以帮助***.com/a/31362055/6743203 或***.com/a/19133787/6743203 【参考方案1】:

您可以使用系统属性来设置 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】:

我认为这个答案会对你有所帮助click here

我已经按照页面上的说明运行了代码,每次启动应用程序时都会得到一个新的日志文件。

这样的结果:

我的 Test.java 中的所有代码都是:`

private static final Logger log = Logger.getLogger(Test.class);

public static void main(String[] args) 
    log.info("Hello World");

`

【讨论】:

您能否在此处提供属性文本,即屏幕截图中显示的文本? 受字符数限制,我这里只显示fileOnReboot属性,如果你想要其他的,我稍后会提供(我认为其他人对你的问题并不重要)log4j.rootLogger=fileOnReboot log4j.appender.fileOnReboot=jian.log4j.NewFileOnRebootAppender log4j.appender.fileOnReboot.File=appLogOnReboot.log log4j.appender.fileOnReboot.layout=org.apache.log4j.PatternLayout log4j.appender.fileOnReboot.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss %-5p %c1:%L - %m%n 【参考方案3】:

您需要编写(或查找)一个自定义附加程序,该附加程序将创建名称中带有时间戳的文件。 log4j 中文件日志记录的 3 个默认实现是:

FileAppender :一个文件记录,没有大小限制。 RollingFileAppender : 当前文件达到大小限制时的多个文件和滚动文件 DailyRollingFileAppender : 每天一个文件

最简单的方法是扩展FileAppender 并覆盖setFilegetFile 方法。

【讨论】:

在我的情况下扩展 FileAppender 并覆盖 setFile 就足够了。

以上是关于Log4j 属性 |为每次运行创建带有时间戳的新日志文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本每天创建带有时间戳的文件夹并推送时间戳生成的日志

根据另一列中的更改创建带有时间戳的最后修改列

带有日期和时间戳的 BBD 功能

带有谷歌时间戳的 Protobuf C++ 消息导致段错误 [重复]

带有时间戳的 AWS Athena SQL 查询错误

VBA 自动保存为带有用户名和时间戳的宏