【问题标题】:How do I include a UNIX timestamp in a rolled log filename with log4j2?如何使用 log4j2 在滚动日志文件名中包含 UNIX 时间戳?
【发布时间】:2016-09-06 21:38:04
【问题描述】:

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

{
    "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"

认为由于Layout 文档页面中提到了%d{UNIX} log4j2,它会起作用。

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

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

【问题讨论】:

    标签: java logging configuration log4j log4j2


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 2019-03-17
      相关资源
      最近更新 更多