Tomcat intégré à Spring Boot peut générer automatiquement les journaux d'accès dans un fichier. Dans cet article, je vais vous montrer comment le sortir de la sortie standard.
Écrivez un RestController qui reçoit un bon GET et POST.
@RequestMapping("hello")
@RestController
public class HelloController {
@GetMapping("")
public String hello() {
return "Hello, world!";
}
@PostMapping("")
public String message(@RequestBody String message) {
return "Hello, " + message + "!";
}
}
Vous pouvez générer le journal d'accès en décrivant les paramètres suivants dans application.properties.
server.tomcat.accesslog.enabled=true
server.tomcat.basedir=/path/to/dir
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd
Quand je l'ai réellement frappé localement, le journal d'accès était sorti dans /path/to/dir/logs/access_log.yyyy-MM-dd.log.
$ curl localhost:8080/hello
Hello, world!
curl -H "Content-Type: text/plain" localhost:8080/hello -d "mito"
Hello, mito!
$ ls /path/to/dir/logs
access_log.2019-11-08.log
$ cat /path/to/dir/logs/access_log.2019-11-08.log
0:0:0:0:0:0:0:1 - - [08/Nov/2019:17:59:56 +0900] "GET /hello HTTP/1.1" 200 13
0:0:0:0:0:0:0:1 - - [08/Nov/2019:18:00:01 +0900] "POST /hello HTTP/1.1" 200 16
Comme également mentionné dans l'application Twelve-Factor, il est plus courant pour les applications modernes de générer des journaux en sortie standard.
Il existe plusieurs façons de sortir la sortie standard.
Vous pouvez exporter vers la sortie standard en concevant les paramètres et en définissant le fichier de destination de sortie sur / dev / stdout.
server.tomcat.accesslog.enabled=true
server.tomcat.basedir=/dev
server.tomcat.accesslog.directory=stdout
server.tomcat.accesslog.suffix=
server.tomcat.accesslog.prefix=
server.tomcat.accesslog.file-date-format=
Dans certains cas, vous pouvez éviter de toucher directement / dev / stdout. Vous pouvez définir la destination de sortie sur la sortie standard en utilisant logback-access.
Tout d'abord, placez logback-access.xml dans src / main / resources / conf /
.
Logback-access.xml est décrit comme suit afin qu'il soit sorti vers stdout.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- combined log format-->
<pattern>combined</pattern>
</encoder>
</appender>
<appender-ref ref="STDOUT" />
</configuration>
Ajouter une dépendance d'accès à la journalisation (ci-dessous pour gradle)
dependencies {
...
+ implementation group: 'ch.qos.logback', name: 'logback-access', version: '1.2.3'
}
En créant un Bean de TomcatServletWebSErverFactory, les paramètres sont reflétés dans le tomcat intégré.
@Configuration
public class TomcatLoggingConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();
//LogbackValve fait référence aux ressources et ci-dessous, donc c'est logback-access.Le contenu de xml est reflété
tomcatServletWebServerFactory.addContextValves(new LogbackValve());
return tomcatServletWebServerFactory;
}
}
Lorsque vous le démarrez et effectuez une demande, vous pouvez voir que le journal suivant est généré.
0:0:0:0:0:0:0:1 - - [08/11/2019:18:38:29 +0900] "GET /hello HTTP/1.1" 200 13 "-" "curl/7.54.0"
0:0:0:0:0:0:0:1 - - [08/11/2019:18:38:20 +0900] "POST /hello HTTP/1.1" 200 16 "-" "curl/7.54.0"
Il n'est pas nécessaire de définir application.properties.
En utilisant logback-access-spring-boot-starter, les paramètres d'accès à la connexion ci-dessus sont automatiquement reflétés. Le fera.
Ajouter une dépendance,
dependencies {
...
+ implementation group: 'net.rakugakibox.spring.boot', name: 'logback-access-spring-boot-starter', version: '2.7.1'
}
Si vous placez logback-access.xml directement sous src / main / resources
, le journal d'accès sera sorti sur la sortie standard. Pratique...!
https://www.baeldung.com/spring-boot-embedded-tomcat-logs http://logback.qos.ch/access.html https://stackoverflow.com/questions/36780680/how-do-you-tell-spring-boot-to-send-the-embedded-tomcats-access-logs-to-stdout?answertab=votes#tab-top https://github.com/akihyro/logback-access-spring-boot-starter
Recommended Posts