Я пытаюсь заставить log4j2 (V2.11.1) свернуть существующий файл журнала при запуске, прежде чем он начнет входить в новый файл.Мой конфиг ниже.Я использую RollingFileManager с OnStartupTriggeringPolicy с minSize = 0, что, согласно документации, должно быть достаточным.
Однако я обнаружил, что при запуске метод OnStartupTriggeringPolicy
class initialize
сравнивает временную метку файла журнала с запуском JVM, и, если время файла журнала превышает время запуска, файл не будет свернут.Если я перешагиваю код, то вижу, что в момент выполнения проверки время файла всегда превышает время запуска JVM, поскольку log4j2, по-видимому, уже открыл файл для записи в этот момент.
public void initialize(RollingFileManager manager) {
if (manager.getFileTime() < JVM_START_TIME && manager.getFileSize() >= this.minSize) {
if (this.minSize == 0L) {
manager.setRenameEmptyFiles(true);
}
manager.skipFooter(true);
manager.rollover();
manager.skipFooter(false);
}
}
Это ошибка или я просто что-то не так делаю?
РЕДАКТИРОВАТЬ: Выдал отчет об ошибке с командой Log4j2 ( LOG4J2-2517 ).Первоначальные обсуждения в значительной степени подтверждают, что это действительно ошибка.
log4j2.json:
{
"configuration": {
"appenders": {
"Console": {
"name": "Console",
"PatternLayout": {
"pattern": "%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%c{2}] [%t]%n[%p] : %m%n"
}
},
"RollingFile": {
"name": "RollingFile",
"fileName": "logs/orchestrator.log",
"filePattern": "logs/orchestrator-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz",
"append": false,
"PatternLayout": {
"pattern": "%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%c{2}] [%t]%n[%p] : %m%n"
},
"Policies": {
"OnStartupTriggeringPolicy": {
"minSize" : 0
},
"SizeBasedTriggeringPolicy": {
"size": "50 MB"
}
},
"DefaultRolloverStrategy": {
"max": "10"
}
}
},
"loggers": {
"root": {
"level": "info",
"AppenderRef": [
{"ref": "RollingFile", "level": "INFO"},
{"ref": "Console", "level": "ERROR"}
]
}
}
}
}