[JAVA] Sortez le journal d'accès Tomcat intégré à la sortie standard avec Spring Boot

Aperçu

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.

environnement

Tout d'abord, sortez le journal d'accès

É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

Sortie du journal d'accès à la sortie standard

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.

Sortie vers / dev / stdout

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=

Utiliser l'accès à la connexion

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.

Utilisez logback-access-spring-boot-starter

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...!

référence

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

Sortez le journal d'accès Tomcat intégré à la sortie standard avec Spring Boot
Flux jusqu'à la sortie des données de la table à afficher avec Spring Boot
Sortie du journal Spring Boot au format json
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Sortie des journaux de demande et de réponse avec Spring Boot
Essayez d'implémenter la fonction de connexion avec Spring Boot
Essayez d'automatiser la migration avec Spring Boot Flyway
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Je voulais classer la botte à ressort dans un multi-projet
Remplacement de la sortie du journal Tomcat 8.5 par Log4j2.8 ou version ultérieure
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Télécharger avec Spring Boot
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
Mappez automatiquement DTO aux entités avec l'API Spring Boot
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
Journal de sortie vers un fichier externe avec slf4j + logback avec Maven
Comment sortir le standard d'un tableau avec for Each
Déployer le projet Spring Boot sur Tomcat dans XAMPP
Comment démarrer par environnement avec Spring Boot de Maven
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Découpez SQL en fichier de propriété avec jdbcTemplate of spring boot
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Introduction à Spring Boot ① ~ DI ~
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Contrôle de la sortie du journal avec Doma2
Introduction à Spring Boot ② ~ AOP ~
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
Spring Boot à partir de Docker
Exemple de sortie de journal standard Java
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Introduction à Spring Boot, partie 1
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
Que faire si le journal utilisant JUL n'est plus sorti dans le journal de l'application après le déploiement de l'application Spring Boot sur Tomcat en tant que guerre
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
Exemple de code pour le test unitaire d'un contrôleur Spring Boot avec MockMvc
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Comment configurer Spring Boot + PostgreSQL
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot