查找和模式之间的区别

亚尼克·萨尔兹曼(Yanick Salzmann)

RollingFileAppenderLog4j2中有关的一个问题中,我找到了以下代码<Property name="FilePattern">C:/logs/$${date:yyyy-MM}/app-%d{MM- dd-yyyy}-%i.log.gz</Property>

我想知道为什么$${data:yyyy-MM}在上半部分使用查找,在下半部分使用模式%d{yyyy-MM-dd}使用例如会有什么效果C:/logs/%d{yyyy-MM}/app-%d{...}-%i.log.gz

根据我在文档中阅读的内容,查找支持许多(更复杂的)类型的属性查找,但是在上述情况下有什么好处,特别是考虑到文档明确声明该filePattern属性支持日期查找(The pattern also supports interpolation at runtime so any of the Lookups (such as the DateLookup) can be included in the pattern.),但不涉及何时或是否应该使用任何细节。

亚尼克·萨尔兹曼(Yanick Salzmann)

因此,我进行了一些反向工程,上面布局的原因在以下代码中:

for (final ArrayPatternConverter converter : patternConverters) {
    if (converter instanceof DatePatternConverter) {
        final DatePatternConverter dateConverter = (DatePatternConverter) converter;
        frequency = calculateFrequency(dateConverter.getPattern());
    }
}

因此,在我的第一种情况下,完全替换的filePattern如下所示: logs/%d{yyyy_MM_HH_mm}/appl_log_%d{yyyy_MM_dd}.txt

上面的代码来自PatternConverter该类,它将首先从%d{yyyy_MM_HH_mm}确定频率to的转换器开始EVERY_MINUTE,然后再检测%d{yyyy_MM_dd}覆盖其旧频率EVERY_MINUTEto的位置DAILY进行过渡时,它会创建一个伪日志事件,该事件具有一个时间(由于DAILY频率的缘故,在一天的开始时间)来格式化文件时间,因此以00_00结尾。

长话短说,当您使用%格式化程序时,解析器正在使用日志事件的时间,这可能不是发生翻转时的当前系统时间。使用$$属性查找时,与日志事件没有关系,因此,您始终以指定的格式获取当前时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章