Как включить метку времени UNIX в свернутое имя файла журнала с 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 это будет работать.

В результате он создает развернутый файл machine.json, но, похоже, не может его добавить. Он остается равным нулю байтов, даже когда я заполняю систему вещами, которые обычно генерируют тонну журналов с исходной конфигурацией.

Что тут происходит? Как мне достичь желаемого эффекта?

1 ответ

Решение

Я не уверен, что вы можете использовать все параметры преобразователя даты PatternLayout %d в RollingFile filePattern.

Однако если ${sys:someKey... работает поиск системных свойств, тогда также будет работать пользовательский поиск. Поэтому одной из идей является написание пользовательского поискового плагина, который генерирует метку времени Unix, и настройте RollingFile filePattern следующим образом:"filePattern":"${sys:my.logging.directory}/RolledLogs/$${date:yyyy}/$${date:MM}/$${mylookup:UNIX}-machine.json.gz"

Вот пример того, как написать собственный плагин поиска Log4j 2: /questions/7819865/kak-nastroit-log4j2-rollingfileappender/7819867#7819867

Другие вопросы по тегам