java - 修改 CompositeRollingAppender 重命名文件的方式

标签 java logging log4j

我在这里看到了很多关于 log4j 的不同附加程序的问题,但似乎没有一个能解决我遇到的问题。如果在任何地方重复这种情况,我们深表歉意。

我在我们的应用程序中使用了 CompositeRollingAppender,因为我们需要根据时间和大小滚动日志文件。这与宣传的完全一样,但是我们最终得到的文件如下:

myapp.log
myapp.log.2010-12-11
myapp.log.2010-12-11.1
myapp.log.2010-12-12

是否可以更改 log4j 如何重命名文件的格式?我敢肯定一定有一个难以捉摸的属性 某处 我错过了。例如在上述情况下我想要这样的东西:

myapp.log
myapp-2010-12-11.log
myapp-2010-12-11.1.log
myapp-2010-12-12.log

这里的重点是扩展名仍然是 .log 为什么你问?因为我们应用程序的管理员提示他们不能直接双击文件打开它(我知道,我知道)。如果它们都有 .log 扩展名,情况就不会如此。

提前致谢。

最佳答案

CompositeRollingAppender 不支持您想要的功能。如果已经有一个合适的日志文件要附加到,它在如何确定(启动时)方面非常有限。它只支持将日期和数字添加到配置的静态名称的末尾。

您可以尝试使用 log4j extras CompositeTriggeringPolicy但我不知道包含日期和窗口的 RollingPolicy

您的管理员的选择是放弃文件的大小限制,以便您可以使用 RollingFileAppenderTimeBasedRollingPolicy用一个

<param name="FileNamePattern" value="MyApp.%d{yyyy-MM-W}.log" />

或者使用当前名称或运行 cron 作业来重命名文件,但请记住,您不能在第二天之前重命名文件(否则您将遇到文件名冲突)。

关于java - 修改 CompositeRollingAppender 重命名文件的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865119/

相关文章:

python - 如何使用 logstash 和 elastic 配置 native python 日志记录库?

log4j - Log4Net 是面向消息的中间件吗?

java - 如何将 java.util.logging 发送到 log4j2?

java - log4j2线程上下文的配置

java - 如何更改外部类?

java - 缓存标注信息的 map 是否需要同步?

java - 我如何确保写入发生在同一存储桶和同一键上的不同线程同时读取 concurrenthashmap 之前?

java - 使用 android 发布数据时出错

c++ - c++ 日志库异步捕获高吞吐量数据的可行性?

python - 从静态方法记录