Я пытаюсь отфильтровать Apache Tomcat
события запуска (/ выключения) из обычного ведения журнала приложения для стороннего инструмента, который управляет жизненным циклом приложения различных экземпляров Tomcat. Основой является Log4j2
(2.12.1) с использованием Regexfilter
в Appender Context
для простого File
аппендера (пример, приведенный ниже, с простым указанием, включая жестко заданные значения):
<Properties>
<Property name="fileName" value="logs/application.log" />
<Property name="filePattern" value="logs/application-%d{MM-dd-yyyy}-%i.log.gz" />
<Property name="pattern" value="%d{ISO8601} %-5p %c - [%t] %m %n"/>
</Properties>
<Appenders>
<RollingFile name="APPLICATION" fileName="${fileName}" filePattern="${filePattern}" bufferedIO="true" append="true">
<PatternLayout pattern="${pattern}" alwaysWriteExceptions="true" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy min="1" max="5" compressionLevel="5" />
</RollingFile>
<File name="STARTUP" fileName="logs/startup.log" bufferedIO="true" immediateFlush="true" append="true">
<PatternLayout>
<Pattern>%d %m%n</Pattern>
</PatternLayout>
<Filters>
<RegexFilter regex=".* startup .*" onMatch="ACCEPT" onMismatch="DENY"/>
<RegexFilter regex=".* Java Home .*" onMatch="ACCEPT" onMismatch="DENY"/>
<Filters>
</File>
</Appenders>
Соответствующий регистратор выглядит следующим образом:
<Logger name="org.apache.catalina.startup" level="INFO" additivity="false">
<Appender-ref ref="STARTUP" />
<Appender-ref ref="APPLICATION" />
</Logger>
Когда я запускаю экземпляр, создаются оба файла журнала. Однако только файл журнала приложения (приложение APPLICATION) содержит записи, в том числе те, которые я заинтересован в фильтрации:
[ec2-user@AWS:./logs] $ grep -Ern "\[main\].*Java Home|\[main\].*Server startup" application.log
4415:2020-03-26T17:40:15,226 INFO org.apache.catalina.startup.VersionLoggerListener - [main] Java Home: /opt/jdk1.8.0_201/jre
4588:2020-03-26T17:41:04,578 INFO org.apache.catalina.startup.Catalina - [main] Server startup in 49087 ms
4786:2020-03-26T17:48:18,043 INFO org.apache.catalina.startup.VersionLoggerListener - [main] Java Home: /opt/jdk1.8.0_201/jre
4959:2020-03-26T17:49:04,625 INFO org.apache.catalina.startup.Catalina - [main] Server startup in 46323 ms
5396:2020-03-26T17:57:58,673 INFO org.apache.catalina.startup.VersionLoggerListener - [main] Java Home: /opt/jdk1.8.0_201/jre
5569:2020-03-26T17:58:45,442 INFO org.apache.catalina.startup.Catalina - [main] Server startup in 46543 ms
6182:2020-03-26T18:13:39,914 INFO org.apache.catalina.startup.VersionLoggerListener - [main] Java Home: /opt/jdk1.8.0_201/jre
6355:2020-03-26T18:14:27,238 INFO org.apache.catalina.startup.Catalina - [main] Server startup in 47073 ms
7096:2020-03-26T18:32:39,525 INFO org.apache.catalina.startup.VersionLoggerListener - [main] Java Home: /opt/jdk1.8.0_201/jre
7266:2020-03-26T18:33:27,550 INFO org.apache.catalina.startup.Catalina - [main] Server startup in 47812 ms
Есть идеи, как отлаживать, почему это не работает, или я упустил что-то очевидное? Я выполнил множество конфигураций проб и ошибок (включая настройку Compositefilter, хотя даже с использованием одного Regexfilter не работает), а также включил отладку log4j2 (StatusLogger выглядит нормально), однако просто нет указаний на то, что не так или почему соответствующие строки не выводятся отдельно в сконфигурированный журнал приложений File
.
Чтение документации (https://logging.apache.org/log4j/log4j-2.3/manual/filters.html) и исходного кода (https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java), а также поиск примеров (https://duckduckgo.com/?q=log4j2+regexfilter+examples ) не помогло мне в дальнейших поисках.