设置日志文件名以包含 Log4j 中的当前日期
我想设置 log4j 和 log4net 附加程序的日志文件名以具有当前日期。 我们正在进行每日滚动,但当前日志文件没有日期。 日志文件名格式将是
logname.2008-10-10.log
任何人都知道我执行此操作的最佳方法吗?
编辑:我忘了提及我们也想在 log4net 中执行此操作。 另外,任何解决方案都需要在 JBoss 中可用。
I would like to set the log file name for a log4j and log4net appender to have the current date. We are doing Daily rollovers but the current log file does not have a date. The log file name format would be
logname.2008-10-10.log
Anyone know the best way for me to do this?
edit: I forgot to mention that we would want to do this in log4net as well. Plus any solution would need to be usable in JBoss.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
DailyRollingFileAppender 正是您所寻找的。
DailyRollingFileAppender is what you exactly searching for.
使用 log4j.properties 文件,并在我的 POM 中包含 apache-log4j-extras 1.1 和 log4j 1.2 .16
Using log4j.properties file, and including apache-log4j-extras 1.1 in my POM with log4j 1.2.16
我 99% 确信 RollingFileAppender/DailyRollingFileAppender 虽然为您提供了所需的日期滚动功能,但没有任何方法来指定当前日志文件也应使用
DatePattern
。您可能只需简单地子类化 RollingFileAppender (或 DailyRollingFileAppender,我忘记了 log4net 中的哪个)并修改命名逻辑。
I'm 99% sure that RollingFileAppender/DailyRollingFileAppender, while it gives you the date-rolling functionality you want, doesn't have any way to specify that the current log file should use the
DatePattern
as well.You might just be able to simply subclass RollingFileAppender (or DailyRollingFileAppender, I forget which is which in log4net) and modify the naming logic.
我创建了一个可以做到这一点的附加程序。 http://stauffer.james.googlepages.com/DateFormatFileAppender.java
I have created an appender that will do that. http://stauffer.james.googlepages.com/DateFormatFileAppender.java
我不知道在 Java 中是否可行,但在 .NET 中,RollingFileAppender 上的属性 StaticLogFileName 可以满足您的需求。 默认为 true。
完整配置:
".log"
用于不让日期格式识别日志中的全局日期模式“g”。I don't know if it is possible in Java, but in .NET the property StaticLogFileName on RollingFileAppender gives you what you want. The default is true.
Full config:
".log"
is for not letting the dateformat recognice the global date pattern 'g' in log.此示例将为每分钟创建记录器,如果您想更改每天,请更改
DatePattern
值。this example will be creating logger for each minute, if you want to change for each day change the
DatePattern
value.作为对提到 DailyRollingFileAppender 的两个答案的回应(抱歉,我没有足够的代表来直接评论它们,我认为需要提及这一点),我要警告说,不幸的是该类的开发人员已经记录了它表现出同步和数据丢失,并建议为新部署寻求替代方案。
DailyRollingFileAppender JavaDoc
As a response to the two answers which mention DailyRollingFileAppender (sorry, I don't have enough rep to comment on them directly, and I think this needs to be mentioned), I would warn that unfortunately the developers of that class have documented that it exhibits synchronization and data loss, and recommend that alternatives should be pursued for new deployments.
DailyRollingFileAppender JavaDoc
您可以动态设置 FileAppender
You can set FileAppender dynamically
只需使用 TimeBasedRollingPolicy 并且不要使用 param name="File"
just use TimeBasedRollingPolicy and don't use param name="File"
您可以像这样以编程方式执行此操作:
You can do it programmatically like so:
即使您像@gedevan建议的那样使用
DailyRollingFileAppender
,您仍然会得到logname.log.2008-10-10
(一天后,因为前一天的日志将被存档并且日期将连接到它的文件名)。因此,如果您希望末尾有 .log,则必须在
DatePattern
上这样做:log4j.appender.file.DatePattern='。 'yyyy-MM-dd-HH-mm'.log'
Even if you use
DailyRollingFileAppender
like @gedevan suggested, you will still getlogname.log.2008-10-10
(After a day, because the previous day log will get archived and the date will be concatenated to it's filename).So if you want .log at the end, you'll have to do it like this on the
DatePattern
:log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm'.log'