【发布时间】:2018-01-30 15:44:43
【问题描述】:
我想知道是否有办法从系统属性中获取子字符串,或者格式化一个以便仅通过 XML 配置去除第一个字符?我遇到的问题是DefaultRolloverStrategy 的Delete 功能。我有以下代码:
<DefaultRolloverStrategy max="31">
<Delete basePath="${sys:log.location}" maxDepth="1">
<IfFileName glob="${web:contextPath}-*.log" />
<IfLastModified age="90d" />
</Delete>
</DefaultRolloverStrategy>
但是,在我的日志中,我可以看到这个值 ${web:contextPath}-*.log 被解释为 /Meanwhile-In-Hell-App1-*.log,第一个字符是 /。这不会删除任何旧文件,因为这个值是相对于 basePath 的(经过一些实验,我发现如果我将 glob 硬编码为 Meanwhile-In-Hell-App1-*.log,它会成功删除旧日志。但是,我不能依赖这个方法,所以必须从${web:contextPath}读取)。我也尝试过使用斜线并在它之前添加一个点,因为路径应该是相对的。但这又不会删除旧文件。
我使用的是 log4j2 2.8 版。
【问题讨论】:
-
删除
basePath属性并设置<IfFileName glob="${sys:log.location}${web:contextPath}-*.log" />怎么样? -
嗯,我没想到。我会试试的!谢谢!
-
欢迎。请让我知道它是否有效。
-
是的,做到了@LuisMuñoz!
-
你可以接受答案然后:-)