【问题标题】:Creating daily logs with Log4j?使用 Log4j 创建每日日志?
【发布时间】:2009-11-18 15:57:22
【问题描述】:

设置 Log4j 以使用以下模式需要哪些配置值?
MyApp-Mon.log
MyApp-Tue.log
MyApp-Wed.log
等等

每个文件都包含天数日志。

这听起来很容易用 Log4j 的 DailyRollingFileAppender 完成,但我遇到了麻烦。
这是我当前的配置;

<appender name="daily-file" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="info"/>
    <param name="DatePattern" value="'-'EE'.log'"/>
    <param name="file" value="MyApp"/>
    <param name="Append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{EEE MMM dd hh:mm:ss zzz yyyy} %-5p %l - %m%n"/>
    </layout>
</appender>

我将此配置基于this 博客文章,但它的行为方式与他描述的不同。日志被创建为没有扩展名的 MyApp。

谁能帮帮我?

【问题讨论】:

  • 你的 DatePattern 值看起来很奇怪,你有几个单引号。
  • @skaffman,这是故意的,我从那个博客和我不久前查看的另一个来源中获取了它。我认为这是将 Java 日期格式与附加到日志文件名的文本分开。
  • 我已将问题编辑为最简单的形式以减少混淆。
  • @James:我认为这有点倒退,现在我们有 less 信息

标签: java configuration logging log4j


【解决方案1】:

我将此配置基于此博客文章,但它的行为方式与他描述的不同。日志被创建为没有扩展名的 MyApp。

这就是你告诉 Log4J 对这一行所做的:

<param name="file" value="MyApp"/>

Log4J 使用此选项的值作为日志文件名,并且该模式仅在发生翻转时应用,如documented

例如,如果设置了文件选项 到 /foo/bar.log 和 DatePattern 设置为 '.'yyyy-MM-dd,于 2001 年 2 月 16 日在 午夜,日志文件 /foo/bar.log 将被复制到 /foo/bar.log.2001-02-16 和日志记录 2001-02-17 将继续 /foo/bar.log 直到它翻转 第二天。

所以在我看来一切都很正常。

要获得所需的行为,您可以编写自己的Appender。看起来 James Stauffer 做了一些非常相似的事情(参见 this answer),但他扩展了 FileAppender。不过,将他的工作改编为 DailyRollingFileAppender 子类应该很容易。

【讨论】:

  • @Pascal,我要稍微澄清一下我的问题。我将如何获得我正在寻找的预期行为?我正试图在该部门拥有的旧版日志查看器中塞入这些日志。
【解决方案2】:

当前日志文件命名为MyApp,明天将改名为Myapp-yesterday 以此类推

但当前日志始终使用默认名称。

【讨论】:

  • 无论如何让它默认附加日期模式?
【解决方案3】:

查看the JavaDocs for the DailyRollingFileAppender,他们列出的所有示例都有特定的数字日期模式,而不是日期名称模式。您是否尝试过使用他们的示例之一是否有效?如果是这样,而你的不支持,那么我假设 DailyRollingFileAppender 不支持使用包含“E”(星期几)的日期模式。

【讨论】:

  • 刚刚使用分钟模式测试了它,yyyy-MM-dd-HH-mm-EE,EE 解析为日期名称。
【解决方案4】:

回应您对帕斯卡回答的评论:

ln -s MyApp.log MyApp-NOW.log 有用吗?您的旧版日志查看器将通过符号链接显示 MyApp-NOW.log,并且 log4j 可以在午夜将 MyApp.log 翻转到 MyApp-TUE.log。

【讨论】:

  • @rsp,我们在服务器上使用windows,所以符号链接解决方案不可行。
  • 您也许可以使用 Windows 快捷方式?此外,如果您有 Vista 或更新版本,我在 msdn 上看到 Windows 通过 mklink 命令支持符号链接。 (无法测试,因为我有 XP)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多