Log4j2 Rolling File Appender IfFileName条件没有查找/删除文件

时间:2017-06-23 12:39:43

标签: log4j2 rollingfileappender

我有一个程序,我试图以编程方式更改滚动文件appender的默认翻转策略,如果我将IfFilName路径条件保留在其中,并且仅使用IfLastModified路径条件,那么一切正常要完美地工作,但是当我添加IfFileName条件时,它会停止删除文件......

所以我创造这种情况的方式有问题。

我的xml文件将此设置为appender -

<RollingFile name="RollingFile" fileName="cc" filePattern="logs/${baseFileName}-%d{yyyy-MM-dd}.log.gz">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%-40t] %-5level %-80.80l - %msg%n"/>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <DefaultRolloverStrategy>
            <Delete basePath="logs/">
                <IfFileName glob="${baseFileName}-*.log.gz" />
                <IfLastModified age="2d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

所以,正如您所看到的,每个日志文件都保存在基本目录的logs文件夹中,该目录以此属性设置在顶部命名 -

 <Properties>
    <Property name="baseFileName" value="VrsEditor"/>
</Properties>

它的设置是这样的,因为程序的不同服务有不同的名称,所以baseFileName基于哪个配置文件/类正在进行日志记录...

这个配置文件运行良好并完成工作,但是当我应用我的方法更改默认翻转策略时,如果我包含IfFileName条件,它将停止工作

这是我如何设置这个条件 -

IfFileName fileName = IfFileName.createNameCondition("${baseFileName}-*.log.gz", "${baseFileName}-*.log.gz");

createNameCondition方法是这样的 -

 createNameCondition(                          @PluginAttribute(value="glob")
                                               String glob,
                                               @PluginAttribute(value="regex")
                                               String regex)

所以对于这个方法,我需要传入一个String glob值和一个String regex值....正如你在上面看到的那样,我只使用了原始配置文件中完全相同的String,因为我只想要这个要更改的方法是IfLastModified条件,保存文件的天数。

有没有人知道为什么这个IfFileName条件不能正常工作,即使我传入与它工作的原始配置文件完全相同的值?

我在想它唯一可能的是Regex部分,因为String部分应该完全相同没有?

我需要使用什么样的正则表达式转换才能将“$ {baseFileName} - *。log.gz”转换为正则表达式?或者如果还有其他问题,为什么这个IfFileName条件不能以编程方式工作,而是从配置文件本身工作?

1 个答案:

答案 0 :(得分:0)

您可以通过在配置文件的顶部设置<Configuration status="trace">来调试正在发生的事情。这会将内部Log4j2调试语句打印到控制台。 Log4j2中的自定义删除操作具有相当详细的日志记录。

我怀疑发生的事情是你的glob的${baseFileName}部分按字面解释。您希望这是一个在自定义删除操作触发之前被某个路径替换的变量,但我怀疑该模式未被替换。

调试会告诉你发生了什么。如果我没错,解决方法是使用文字值。 (并且您可以在Log4j2 JIRA问题跟踪器上提出功能请求。)