#logback
#logback
Вопрос:
Я включил журнал обратного доступа для Tomcat 7.0, используя LogbackValve. Моя конфигурация обратного доступа выглядит следующим образом.
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>combined</pattern>
</encoder>
</appender>
<appender-ref ref="FILE" />
</configuration>
Теперь это работает идеально, и я могу видеть журналы доступа. Но в каком-то другом коде я хочу получить приложение, настроенное в logback-access.xml программно. Есть ли способ сделать это. Поскольку не определены регистраторы, вы не можете использовать LoggerContext .
Ответ №1:
Вы можете использовать LogbackAccessContext для получения приложений, настроенных в logback-access.xml . Это мое решение:
TomcatServletWebServerFactory sc = (TomcatServletWebServerFactory) context.getBean(TomcatServletWebServerFactory.class);
List<Valve> values = (List<Valve>) sc.getEngineValves();
LogbackAccessTomcatValve accessTomcatValve = null;
for(Valve value : values) {
if(value.getClass() == LogbackAccessTomcatValve.class) {
accessTomcatValve = (LogbackAccessTomcatValve) value;
}
}
//get logbackAccessContext from the logbackAccessTomcatValve by invoking.
LogbackAccessContext logbackAccessContext = null;
Field field = null;
try {
field = accessTomcatValve.getClass().getDeclaredField("logbackAccessContext");
field.setAccessible(true);
logbackAccessContext = (LogbackAccessContext) field.get(accessTomcatValve);
} catch (Exception e) {
log.error("Exception happened when fetching the logback access context ." e.getMessage());
}