web-dev-qa-db-fra.com

Comment utiliser plusieurs configurations avec logback dans un seul projet?

Le fichier de configuration pour la consignation se trouve sur le chemin d'accès aux classes et est par conséquent spécifique au projet Eclipse, ce qui n'est pas ce que je veux. J'utilise plusieurs utilitaires Java, tous résidant dans un même projet (ce partage du chemin de classe), et je dois utiliser une configuration spécifique pour certains d'entre eux.

J'ai essayé la substitution de variable et le configurateur Joram, mais rien ne fonctionnait pour moi. C'était probablement ma faute, et je vais le résoudre un jour, mais pour le moment, il me faudrait une solution simple.

36
maaartinus

OPTION 1: spécifiez l'emplacement du fichier de configuration logback avec la propriété système logback.configurationFile. Cela vous permet en effet d’avoir plusieurs fichiers de configuration par projet. Selon la documentation logback , la valeur de cette propriété peut être une URL, une ressource figurant sur le chemin de classe ou un chemin vers un fichier externe à l'application. Par exemple:
-Dlogback.configurationFile=/path/to/config.xml

OPTION 2: utilisez la substitution de variable pour définir le nom du fichier journal avec une propriété système. Par exemple:

  1. Votre appender peut définir le fichier comme suit:
    <file>/var/tmp/${mycompany.myapplication}.log</file>
  2. Et vous pouvez ensuite spécifier la valeur de cette variable lors du lancement de Java:
    -Dmycompany.myapplication=SomeUtility

OPTION 3: définissez le niveau du consignateur avec une propriété système. Cela vous permettra de vous connecter plus/moins. Par exemple:

  1. Mettez ceci dans votre fichier de configuration logback:
    <logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
    Le package spécifié se connecte par défaut au niveau DEBUG.
  2. Si vous souhaitez modifier le niveau de consignation en INFO dans une application spécifique, transmettez ce qui suit à Java lors du lancement de cette application:
    -Dmycompany.logging.level=INFO

OPTION 4: ajouter/supprimer un générateur d'appels en transmettant un paramètre de ligne de commande de propriété système à Java. Cela vous permettra de vous connecter à différents endroits. Notez que le traitement conditionnel nécessite janino . Par exemple:

  1. Mettez ceci dans votre fichier de configuration logback où vous voudriez mettre un <appender-ref>, en changeant la valeur ref en un de vos propres <appender>s, bien sûr:
    <if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
  2. Si vous souhaitez activer cet appender, transmettez ce qui suit à Java lors du lancement de cette application:
    -Dmycompany.logging.console=true

En ce qui concerne les propriétés système, vous les transmettez à Java sous la forme d'arguments -D, par exemple.
Java -Dmy.property=/path/to/config.xml com.mycompany.MyMain

58
jtoberon

Dans une application Spring Boot, vous pouvez référencer les profils Spring dans le fichier de configuration logback.

Voir cet article .

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <springProfile name="dev">
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
        <pattern>
          %d{HH:mm:ss.SSS} | %5p | %logger{25} | %m%n
        </pattern>
        <charset>utf8</charset>
      </encoder>
    </appender>
    <root level="DEBUG">
      <appender-ref ref="CONSOLE"/>
    </root>
  </springProfile>
  ...
0
Agustí Sánchez