Я относительно новичок в log4j (v2), но я считаю, что исчерпал свои ресурсы, поэтому я пришел, чтобы задать свой вопрос здесь.
У меня есть рабочая конфигурация log4j, которую я добавлю в конец моего вопроса. Приложение запускается каждые x минут с помощью cronjob.
Поведение log4j, которое я бы хотел увидеть, следующее:
Я достиг 1 и 2, используя приведенную ниже конфигурацию. Возможно ли также номер 3 с использованием log4j (если нет, почему бы и нет?), И если да, то как?
Текущая конфигурация:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RandomAccessFile name="LogFile" fileName="/var/log/fileA.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</RandomAccessFile>
<RandomAccessFile name="ErrorLogFile" fileName="/var/log/fileB.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</RandomAccessFile>
<SMTP name="MailError" subject="Error occurred" to="[email protected]" smtpHost="mail.foo.bar" from="[email protected]"/>
<Async name="Async">
<AppenderRef ref="LogFile"/>
</Async>
<Async name="Errors">
<AppenderRef ref="ErrorLogFile"/>
<AppenderRef ref="MailError"/>
</Async>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console" level="INFO"/>
<AppenderRef ref="Async" level="INFO"/>
<AppenderRef ref="Errors" level="ERROR"/>
</Root>
</Loggers>
</Configuration>
Я думаю, вы сможете достичь этого с помощью ThresholdFilter. Создайте уровень корневого регистратора TRACE, чтобы он отправлял все события всем приложению, а затем добавлял разные пороговые фильтры для каждого приложения. В руководстве по log4j2 приведен пример.
(EDIT) Понимая требования лучше, я думаю, что SMTP Appender уже делает то, что вам нужно: он внутренне хранит буфер событий (по умолчанию 512), который предшествовал событию ERROR, вызвавшему электронное письмо. Эти предшествующие события будут включены в электронное письмо.