【发布时间】:2018-02-24 11:22:28
【问题描述】:
我目前正在尝试在新的 Log4j2 (2.6) 中运行删除操作。 可以删除带有预配置条件的日志文件,例如文件大小或年龄。 这方面的信息在网络上确实很少见,但足以以某种方式对其进行配置。 无论如何,它不适合我。
我们正在使用一个属性文件来配置我们的 Log4J2。 写作完全符合预期,只有删除没有。
所以,这是我们的属性文件的 sn-p:
主日志文件
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = log/%d{yyyyMMdd}_xxxlog.zip
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2m
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = /log
appender.rolling.strategy.action.maxdepth = 1
appender.rolling.strategy.action.condition.type = IfLastModified
appender.rolling.strategy.action.condition.age = 1D
appender.rolling.strategy.action.PathConditions.type = IfFileName
appender.rolling.strategy.action.PathConditions.glob = *.log
All starts with the line: **appender.rolling.strategy.action.type = Delete**
接下来是基本路径。在这里,我尝试了多个选项,例如绝对路径或相对路径。 我还尝试了使用和不使用斜杠开始和结束...其中一些尝试会导致控制台出错,因此至少“/log”似乎是正确的方式(您也可以使用/log/)。
在第三行,“appender.rolling.strategy.action.maxdepth = 1”,我尝试了更多的值。可以肯定的是,这不是问题。所有日志文件都在根目录下,所以 1 似乎是正确的。
下一行:appender.rolling.strategy.action.condition.type = IfLastModified
我刚刚查看了代码,在它没有按预期工作之后,为了绝对确定,有一个函数 IfLastModified。它就在那里,我可以在控制台中确认它的调用和“工作”。
下一步:appender.rolling.strategy.action.condition.age = 1D 在这里,我也尝试了多种选择。 1 m , 1 D... 可以肯定的是,我在目录中复制了旧的日志文件,这些文件早于 1 分钟和/或早于 1 天。
appender.rolling.strategy.action.PathConditions.type = IfFileName
这是条件,您要删除哪些文件。我从 *.log 开始 但我也尝试了绝对名称 logfile.log 和许多其他可能性。我有 .zip、.log、.txt...
然后我想到了可能,该软件可能无权删除该文件夹中的某些内容。我授予文件权限和对所有内容的访问权限,就像写入、读取、删除一样。 毕竟,我可以说,属性配置似乎很好,因为没有错误。 但这只是行不通。
啊,最后但同样重要的是,我还发现行尾的空格会导致错误。 没有空格……这根本不是问题。
有人知道它为什么不工作吗? 我感谢任何帮助或想法。 非常感谢。
祝你有美好的一天,
提姆
【问题讨论】:
-
<DefaultRolloverStrategy max="3"/>是您可能正在寻找的东西吗? -
将内部 Log4j2 状态日志配置为 TRACE 可能很有用。这将显示翻转到控制台期间发生的情况的详细信息。
-
您好,感谢您的回答。我已经将其配置为跟踪。这首先向我显示了一些配置错误,当我配置了一些错误的值时,例如:appender.rolling.strategy.action.condition.age = 1(注意没有像月,日这样的有效规范)。这会被记录下来。如果我配置它,故障就会消失。这就是为什么我得出结论,它的配置是正确的。我必须监督其他事情。
-
@nullpointer:你什么意思?我看到它有点xml-config,对吧?我发现:尝试添加默认滚动策略`
`,每天只允许3个文件,使用你想要的任何数字。但这不是我想要的。实际上,如果它清除所有或一个日志文件,我会很高兴,但没有任何反应。没有痕迹,没有错误,什么都没有。
标签: java logging properties log4j log4j2