使用Spring Boot和logback-access来输出Tomcat的访问日志
在Spring Boot中,如果要输出Tomcat的访问日志,可以使用server.tomcat.accesslog.*属性,但如果使用这个属性还不够的话,可以使用logback-access。配置起来很简单,只需添加logback-access-spring-boot-starter的依赖即可。在这里,我将记录下不使用这个starter而实现相同配置的方法。实际上内部执行的操作和使用starter是等效的。
首先,添加logback-access的依赖。
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.5'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'ch.qos.logback:logback-access'
}
tasks.named('test') {
useJUnitPlatform()
}
添加logback-access的配置如下。 logback配置文件用于访问日志,详情请见后文,默认文件名为conf/logback-access.xml,可以根据以下注释行进行更改。
import org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ch.qos.logback.access.tomcat.LogbackValve;
@Configuration
public class LogbackAccessConfig {
@Bean
public WebServerFactoryCustomizer<ConfigurableTomcatWebServerFactory> webServerFactoryCustomizer() {
return (factory) -> {
LogbackValve v = new LogbackValve();
// v.setFilename(new ClassPathResource("logback-access.xml").getPath());
factory.addEngineValves(v);
};
}
}
将用于访问日志的配置文件放置在 src/main/resources/conf/logback-access.xml 文件中。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>combined</Pattern>
<Pattern>[ACCESS] %h %l %u %r %t{yyyy-MM-dd HH:mm:ss.SSS} %s %b %D ms</Pattern>
</encoder>
</appender>
<appender-ref ref="STDOUT" />
</configuration>
这样做将会显示以下的访问日志。
[ACCESS] 0:0:0:0:0:0:0:1 - - GET /hoge HTTP/1.1 2023-04-11 18:23:05.002 404 275 24 ms