经过数小时试图找到一个与 SpringBoot 1.4 + Jetty + Logback-access 一起使用的解决方案后,我终于找到了解决我的困境的方法。
Jetty 的 API 接口在 v9.3 中更改,Logback-access 不再有效。
http://shibboleth.1660669.n2.nabble.com/Jetty-9-3-access-logging-recommended-configuration-td7620755.html
Logback 项目中有一个拉取请求,要求它再次工作。
https://github.com/qos-ch/logback/pull/269
上面的拉取请求中提到了几个解决方案。
选项 1。
使用 org.eclipse.jetty.server.Slf4jRequestLog 实现将日志记录配置路由回经典 Logback。
JettyConfiguration @Bean
RequestLogHandler requestLogsHandler = new RequestLogHandler();
requestLogsHandler.setServer(server);
Slf4jRequestLog log = new Slf4jRequestLog();
log.setLoggerName("com.example.accesslog");
requestLogsHandler.setRequestLog(log);
handlers.addHandler(requestLogsHandler);
server.setHandler(handlers);
logback.xml
<appender name="FILE-ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/main.log</file>
<encoder>
<!-- You'll have to work this out -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/main.%d{yyyy-MM-dd}-%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>14</maxHistory>
</rollingPolicy>
</appender>
<logger name="com.example.accesslog">
<appender-ref ref="FILE-ACCESS" />
</logger>
这可行,但是您丢失了 Logback-access 可用的自定义 PatternLayout 中的所有访问日志特定参数。您可能需要推出自己的模式类。
认为这可能有效,但它没有(或者我没有正确执行)。
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.access.PatternLayout">
<pattern>%h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}"</pattern>
</layout>
</encoder>
选项 2
在上面的拉取请求中还提到了一个问题的修复,可以在它被排序之前使用。
创建一个类来添加缺少的接口并使用它来代替 RequestLogImpl。
新课程
package com.example.ch.qos.logback.access.jetty;
import ch.qos.logback.access.jetty.RequestLogImpl;
import org.eclipse.jetty.util.component.LifeCycle;
public class LogbackAccessRequestLogImplFix1052 extends RequestLogImpl implements LifeCycle {
}
码头配置@Bean
RequestLogHandler requestLogs = new RequestLogHandler();
requestLogs.setServer(server);
LogbackAccessRequestLogImplFix1052 rli = new LogbackAccessRequestLogImplFix1052();
rli.setResource("/logback-access.xml");
rli.setQuiet(false);
requestLogs.setRequestLog(rli);
handlers.addHandler(requestLogs);
server.setHandler(handlers);
我尝试了这两种方法,最终选择了选项 2,因为我已经在这方面花费了太久。不过,我更喜欢选项 1,因此我可以将所有日志记录配置保存在同一个文件中。
祝你好运。