У нас есть специальная схема ведения журнала, где я работаю. Поскольку нужно регистрировать несколько программ, мы будем сортировать их по дате, а не по имени файла. Так, например, файл журнала, созданный нашей программой сценарий запуска на 27 сентября 2016 года на компьютере под названием «Воин» будет располагаться таким образом:log4j как автоматически создать новый файл журнала каждый день без архивирования старых
<root folder>/logs/warrior/2016/09 - Sep/27 - Launcher.log
Это делает для нахождения правильного файла журнала для конкретного компьютер очень организован, но также очень быстрый. Если некоторые из этой схемы ведения журнала необходимо изменить, у меня есть немного места для маневра, чтобы это сделать. Если возможно, я бы хотел сохранить это как есть.
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые из наших пользователей поддерживают программу в течение ночи. На следующий день вся информация о регистрации появляется в файле журнала предыдущего дня. Есть ли способ, чтобы log4j (в настоящее время версия 2.6) автоматически обнаруживает, что произошел новый день, и измените файл ведения журнала на 28 - Launcher.log
, сохранив ту же схему, что и выше? Также, чтобы он автоматически создавал папку 10 - Oct/
, когда в следующий раз попадает и т. Д.?
Мне не нужен log4j, чтобы архивировать что угодно, так как файлы журнала всегда будут перескакивать каждый день, поэтому мне действительно не нужна политика триггера (за исключением, возможно, основанной на размерах, на всякий случай файла становится действительно огромным) на RollingFileAppender. Вот то, что я до сих пор в файле log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="filename">logs/artdept.log</Property>
<Property name="baseDir">/Volumes/ArtDept/ArtDept/Scripts/sky-artdept/logs</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="${filename}">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<RollingFile name="RollFile" fileName="${baseDir}/${env:USER}/${date:yyyy}/${date:MM} - ${date:MMM}/${date:dd} - Launcher.log"
filePattern="${baseDir}/Archives/${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="RollFile"/>
</Root>
</Loggers>
</Configuration>
Я уверен, что я что-то простое, чтобы заставить его изменить файлы в полночь не хватает, но я не могу понять, что это такое.
Используйте эту ссылку, это может вам помочь ..http: //stackoverflow.com/questions/20618527/create-new-log-file-daily-using-log4j – mhasan
Спасибо @mhasan, но я боюсь, что информация там теперь устарела. Насколько я могу судить, 'DailyRollingFileAppender' не существует в последней версии log4j (в настоящее время 2.6). Кроме того, даже если это так, похоже, что он добавляет дату только к имени файла. Мне нужна возможность поместить различные части даты на весь путь в файл журнала. например, '2016/09 - сентябрь/27 - Launcher.log' – Sturm
Хорошо, я * мог * обнаружить обходной путь для этого. Я буду публиковать его в ближайшее время, надеюсь, но это зависит от версии log4j версии 2.7. Оказывается, я столкнулся с [ошибкой] (https://issues.apache.org/jira/browse/LOG4J2-1548?jql=project%20%3D%20LOG4J2%20AND%20text%20~%20cron), которая вызывает архивирование, чтобы запускать каждую секунду, когда есть обновление основного файла журнала. Как только эта проблема будет решена, я опубликую обновленный файл log4j2.xml, чтобы все могли видеть, как я это планировал. – Sturm