別の方法として、Servlet Filter を登録し、通常のログに書き込む方法があります。
アクセス イベントと他のイベントが混在しないようにするには、無効にしadditivity
ます。
<appender name="ACCESS-LOG"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./log/evilAccess.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} %msg ip=%mdc{ip} session=%mdc{session} user=%mdc{user}%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>./log/evilAccess-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>5MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<logger name="com.evil.web.log.MyAccessLogFilter" level="debug" additivity="false">
<appender-ref ref="ACCESS-LOG" />
</logger>
<logger name="com.evil.web.log.MyAccessLogFilter" level="debug" additivity="false">
<appender-ref ref="ACCESS-LOG" />
</logger>
LoggingFilter
@ServletComponentScan
これは通常のサーブレット フィルターであり、 on @Configuration
class + @WebFilter
onimplements javax.servlet.Filter
または bean config を介して Spring Boot アプリに簡単に登録できます。
@Bean
myAccessLogFilter myAccessLogFilter() {
SaAccessLogFilter filter = new MyAccessLogFilter();
// filter.setMaxPayloadLength(100);
return filter;
}
@Bean
FilterRegistrationBean registration() {
FilterRegistrationBean registration = new FilterRegistrationBean(myAccessLogFilter());
registration.setOrder(1);
registration.setEnabled(true);
return registration;
}
少なくとも以上を使用することをお勧めしGenericFilterBean
ますOncePerRequestFilter
。org.springframework.web.filter
パッケージ内の Spring Web によって既に提供されているいくつかのロギング フィルター:
AbstractRequestLoggingFilter
CommonsRequestLoggingFilter
ServletContextRequestLoggingFilter
OncePerRequestFilter
Slf4j MDC コンテキストに IP アドレスやその他の情報を入力することに基づいて、独自の実装を定義します...