我想知道是否有办法从系统属性获取子字符串,或者格式化子字符串以便仅通过XML配置剥离第一个字符?我遇到的问题是使用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
。这不会删除任何旧文件,因为这个值是相对于Meanwhile-In-Hell-App1-*.log
的(通过一些实验,我发现如果我将glob硬编码为${web:contextPath}
,它会删除旧的日志成功。但是,我不能依赖此方法,因此必须从interface ObjectConstructor {
assign<T, U>(target: T, source: U): T & U;
读取。我也试过使用斜杠并在它之前添加一个点,因为路径应该是相对的。但这又是一次,不会删除旧文件。
我使用的是log4j2版本2.8。
答案 0 :(得分:0)
删除basePath属性并设置
<IfFileName glob="${sys:log.location}${web:contextPath}-*.log" />