java - Log4j2 不像第一个版本那样滚动文件,我在新的配置布局中遗漏了什么吗?
问题描述
我在使用 log4j2 和 RollingFile appender 时遇到了两个问题。第一个是,如果没有现有的存档文件,它总是将可能的最早日期作为文件名,而不是文件创建日期或接触日期。第二个问题主要发生在测试期间,因为我经常启动和停止我的代码。每当我停止/启动服务器时,它会将当前日志移动到存档而不是附加到当前日志。没有特别的步骤来创建它,只要有一个从今天开始的当前日志并启动程序。
我已经尝试手动设置 TimeBaseTriggerPolicy、RollingFile 附加属性并多次更改文件模式,但似乎没有任何问题可以解决这个问题。我已经阅读了 log4j2 手册,因为这些项目与第一个版本不同。
https://logging.apache.org/log4j/2.x/manual/appenders.html
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<RollingFile name="runningLog"
filename="./logs/FooIncoming.log"
filePattern="./logs/FooIncoming-%d{yyyy-MM-dd}.log"
ignoreExceptions="false"
append="true">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] %x [%t] [%c{2}] [%m]%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
</Policies>
<DefaultRolloverStrategy max="10" />
</RollingFile>
...
</Appenders>
<Loggers>
<Logger name="com.foo.bar" additivity="false">
<AppenderRef ref="runningLog" level="debug" />
<AppenderRef ref="errorLog" level="error" />
<AppenderRef ref="Console" level="error" />
</Logger>
<Logger name="research_logger" additivity="false">
<AppenderRef ref="RESEARCH" level="all"/>
</Logger>
<Root level="all">
<AppenderRef ref="runningLog"/>
</Root>
</Loggers>
</Configuration>
作为信息,下面的替换是我发现可以工作的解决方法,但我不能按照 api 文档所说的方式来做这件事似乎仍然很奇怪。
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="./logs/" maxDepth="1">
<IfFileName glob="FooIncoming-??????????.log" />
<IfLastModified age="10d" />
</Delete>
</DefaultRolloverStrategy>
解决方案
推荐阅读
- flutter - 调度程序库捕获的异常:意外的空值
- c# - 答案不正确时如何在表单中再次显示标签的值
- r - survplot 在哪里/为什么/如何使用正则化?
- facebook - MessengerExtensions.getContext 在 web 视图中返回 -32603 错误代码
- microservices - 在 ABAC 模型中从集合中过滤被拒绝的项目
- php - 不能使用 Symfony\Component\HttpFoundation\Session\Session 类型的对象作为数组(Symfony 5.3.9)
- python - 仅为 Django-admin 中的实例对象禁用可点击链接
- javascript - jQuery Chosen:如何从多项选择中获取所选选项文本的数组
- datepicker - 我如何阻止日期选择器 vuetify 组件表的 touchend 事件?
- javascript - 单击 React 中的链接后,如果不刷新,则不会发生路由到另一个页面