2016-02-25 1 views
11

Actuellement, au démarrage du printemps 1.3, nous pouvions uniquement enregistrer le journal d'accès dans un fichier du système de fichiers. Est-il possible d'utiliser le journal personnalisé (comme log4j2) pour enregistrer le journal d'accès?Comment utiliser l'enregistreur personnalisé pour enregistrer le journal d'accès au démarrage du ressort

Je suis actuellement en train d'utiliser le débattement avec amorçage par ressort, mais après avoir vérifié le code source d'amorçage du ressort, l'enregistreur de sous-flux est initialisé avec DefaultAccessLogReceiver qui écrit dans le fichier. Je voudrais utiliser AccessLogHandler si possible, et éviter d'écrire un filtre Web qui enregistre l'accès.

Y at-il un moyen facile de contourner ce problème? (sauf l'écriture d'une requête d'extraction)

Répondre

5

Une astuce pour ce type de problème codé en dur, donc non personnalisable, consiste à masquer la classe pour en sortir une nouvelle avec le même paquet et le même nom. Tout ce que vous avez à faire est de fournir un log4j basé DefaultAccessLogReceiver et assurez-vous qu'il peut être recherché par le chargeur de classe avant celui de la bibliothèque de sous-flux.

package io.undertow.server.handlers.accesslog; 

public class DefaultAccessLogReceiver implements AccessLogReceiver { 

    public void logMessage(final String message) { 
     // TODO: log with log4j 
    } 
} 
+0

c'est une idée intéressante, jamais pensé à cette idée. – Rowanto

0

Spring Boot n'a pas de dépendance de journalisation obligatoire, à l'exception de l'API de consignation-logging, parmi laquelle de nombreuses implémentations sont disponibles. Pour utiliser Logback, vous devez l'inclure, ainsi que certaines liaisons pour la consignation des connexions sur le chemin de classe. La manière la plus simple de faire cela est à travers les poms de départ qui dépendent tous de la journalisation de démarrage-démarrage-démarrage. Pour une application Web, vous n'avez besoin que de spring-boot-starter-web, car cela dépend du transtacteur. Par exemple, en utilisant Maven:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

Spring Boot a une abstraction LoggingSystem qui tente de configurer l'enregistrement en fonction du contenu du classpath. Si Logback est disponible c'est le premier choix. Spring Boot prend également en charge Log4j ou Log4j 2 pour la configuration de la consignation, mais seulement si l'un d'entre eux est sur le chemin de classe. Si vous utilisez les poms de démarrage pour assembler des dépendances, cela signifie que vous devez exclure Logback, puis inclure la version de Log4j que vous avez choisie à la place. Si vous n'utilisez pas les poms de départ, vous devez fournir une connexion au journal (au moins) en plus de la version de Log4j que vous avez choisie.

Le chemin le plus simple est probablement à travers les poms de départ, même si cela nécessite un certain tremblement avec exclue, par exemple. dans Maven:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-logging</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j</artifactId> 
</dependency> 

Pour utiliser Log4j 2, il suffit de compter sur le ressort-boot-démarreur-log4j2 plutôt que ressort-boot-démarreur-log4j.

+1

Je le sais. Mais cela ne vous permet pas d'enregistrer le journal d'accès à la console. Et changez son réglage. Le journal d'accès utilise l'enregistreur natif de bascule. – Rowanto

+0

Pouvez-vous donner des exemples de votre application exactement ce que vous voulez faire. Dans notre application, nous pouvons voir les journaux sur la console. – AGdev