Der in Spring Boot integrierte Tomcat kann automatisch Zugriffsprotokolle in eine Datei ausgeben. In diesem Artikel werde ich Ihnen zeigen, wie Sie dies in der Standardausgabe ausgeben.
Schreiben Sie einen RestController, der ein nettes GET und POST erhält.
@RequestMapping("hello")
@RestController
public class HelloController {
@GetMapping("")
public String hello() {
return "Hello, world!";
}
@PostMapping("")
public String message(@RequestBody String message) {
return "Hello, " + message + "!";
}
}
Sie können das Zugriffsprotokoll ausgeben, indem Sie die folgenden Einstellungen in application.properties beschreiben.
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
Als ich es tatsächlich lokal traf, wurde das Zugriffsprotokoll an /path/to/dir/logs/access_log.yyyy-MM-dd.log ausgegeben.
$ 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
Wie auch in der Twelve-Factor App erwähnt ist es für moderne Anwendungen üblicher, Protokolle in Standardausgabe auszugeben.
Es gibt verschiedene Möglichkeiten, die Standardausgabe herauszuholen.
Sie können auf die Standardausgabe ausgeben, indem Sie die Einstellungen vornehmen und die Ausgabezieldatei auf / dev / stdout setzen.
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=
In einigen Fällen möchten Sie möglicherweise vermeiden, / dev / stdout direkt zu berühren. Sie können das Ausgabeziel mithilfe von logback-access auf Standardausgabe setzen.
Platzieren Sie zunächst logback-access.xml in src / main / resources / conf /
.
Logback-access.xml wird wie folgt beschrieben, damit es an stdout ausgegeben wird.
<?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>
Fügen Sie eine Logback-Zugriffsabhängigkeit hinzu (unten für Gradle).
dependencies {
...
+ implementation group: 'ch.qos.logback', name: 'logback-access', version: '1.2.3'
}
Durch das Erstellen einer Bean von TomcatServletWebSErverFactory werden die Einstellungen im integrierten Tomcat wiedergegeben.
@Configuration
public class TomcatLoggingConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();
//LogbackValve bezieht sich auf Ressourcen und darunter, dies ist also Logback-access.Der Inhalt von XML wird wiedergegeben
tomcatServletWebServerFactory.addContextValves(new LogbackValve());
return tomcatServletWebServerFactory;
}
}
Wenn Sie es starten und tatsächlich eine Anfrage stellen, können Sie sehen, dass das folgende Protokoll ausgegeben wird.
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"
Es ist nicht erforderlich, application.properties festzulegen.
Bei Verwendung von Logback-Access-Spring-Boot-Starter werden die obigen Logback-Access-Einstellungen automatisch wiedergegeben. Werde es tun.
Fügen Sie eine Abhängigkeit hinzu,
dependencies {
...
+ implementation group: 'net.rakugakibox.spring.boot', name: 'logback-access-spring-boot-starter', version: '2.7.1'
}
Wenn Sie logback-access.xml direkt unter "src / main / resources" platzieren, wird das Zugriffsprotokoll an die Standardausgabe ausgegeben. Praktisch...!
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