如何在log4j2的滚动日志文件名中包含UNIX时间戳?

时间:2016-09-06 21:38:04

标签: java logging configuration log4j log4j2

我现在在配置文件中有什么

{
    "type":"RollingFile",
    "name": "machineLog",
    "ThresholdFilter": { "level": "debug" },
    "JsonLayout":{"complete":"true"},
    "Policies":
    {
        "SizeBasedTriggeringPolicy": {"size":"100M"}
    },
    "fileName": "${sys:my.logging.directory}/machine.json",
    "filePattern":"${sys:my.logging.directory}/RolledLogs/$${date:yyyy}/$${date:MM}/%d{yyyy-MM-dd-HH}-machine.json.gz"
}

我希望滚动文件(filePattern条目)包含UNIX时间戳。由于这是合法的,我尝试将该行更改为

"filePattern":"${sys:my.logging.directory}/RolledLogs/$${date:yyyy}/$${date:MM}/%d{UNIX}-machine.json.gz"

确定%d{UNIX}文档页面中log4j2提及了{{1}},因为它可行。

结果是它创建了展开的machine.json文件,但似乎无法附加到它。即使我使用原始配置生成大量日志的东西充斥系统,它仍保持零字节。

这里发生了什么?我怎样才能达到我想要的效果?

1 个答案:

答案 0 :(得分:1)

我不确定您是否可以在RollingFile filePattern中使用PatternLayout%d日期转换器的所有选项。

但是,如果${sys:someKey...系统属性查找有效,那么自定义查找也将起作用。因此,一个想法是编写一个生成unix时间戳的自定义查找插件,并像这样配置RollingFile filePattern: "filePattern":"${sys:my.logging.directory}/RolledLogs/$${date:yyyy}/$${date:MM}/$${mylookup:UNIX}-machine.json.gz"

以下是如何编写自定义Log4j 2查找插件的示例:https://stackoverflow.com/a/27418802/1446916