Propriété print boot, logback et logging.config

Je mets en œuvre la journalisation dans un projet de démarrage printanier avec la bibliothèque de journalisation. Je souhaite charger différents fichiers de configuration de journalisation en fonction de mes profils de spring (propriété ‘spring.pofiles.active’). J’ai 3 fichiers: logback-dev.xml, logback-inte.xml et logback-prod.xml. J’utilise la version Spring boot 1.2.2.RELEASE.

Comme vous pouvez le lire dans la documentation de démarrage du spring ( ici ). Ça dit:

Les différents systèmes de journalisation peuvent être activés en incluant les bibliothèques appropriées dans le chemin de classes, puis personnalisées en fournissant un fichier de configuration approprié à la racine du classpath ou dans un emplacement spécifié par la propriété Spring Environment logging.config . (Notez cependant que la journalisation étant initialisée avant la création d’ApplicationContext, il n’est pas possible de contrôler la journalisation depuis @PropertySources dans les fichiers Spring @Configuration. Les propriétés du système et les fichiers de configuration externes Spring Boot classiques fonctionnent correctement.)

J’ai donc essayé de définir la propriété ‘logging.config’ dans mon fichier application.properties:

logging.config=classpath:/logback-${spring.profiles.active}.xml 

Mais quand je lance mon application, mon logback- {profile} .xml n’est pas chargé …

Je pense que la journalisation est un problème courant que tous les projets utilisant le démarrage du spring ont rencontré. Je veux savoir si je suis dans la bonne direction ou pas parce que j’ai d’autres solutions qui fonctionnent aussi mais je ne les trouve pas élégantes (parsing conditionnelle avec Janino dans le fichier logback.xml ou propriété de ligne de commande).

    J’ai trouvé une solution et j’ai compris pourquoi Spring ne s’occupe pas de ma propriété ‘logging.config’ définie dans le fichier application.properties.

    Solution et explication:

    Lors de l’initialisation de la journalisation, le démarrage du spring ne recherche que les variables classpath ou environment (voir http://docs.spring.io/spring-boot/docs/0.5.0.M3/api/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer .html ).

    La meilleure solution que j’ai trouvée consiste à inclure un fichier parent logback.xml qui inclura le bon fichier de configuration de journalisation en fonction de mon profil printanier.

    logback.xml:

        

    logback- [profile] .xml (dans ce cas, logback-dev.xml):

          %d{ISO8601} %p %t %c{0}.%M - %m%n utf8            

    Remarque: ‘spring.profiles.active’ doit être défini dans les arguments de la ligne de commande lors du démarrage de l’application. Par exemple, pour les propriétés JVM: -Dspring.profiles.active=dev

    Réf docs:

    Edit (plusieurs profils actifs) : afin d’éviter plusieurs fichiers, nous pourrions utiliser un traitement conditionnel qui nécessite une dépendance de Janino ( configuration ici ), voir la documentation conditionnelle . Avec cette méthode, nous pouvons également vérifier plusieurs profils actifs en même temps. EG (je n’ai pas testé cette solution, mettez un commentaire si cela ne fonctionne pas):

                  

    Voir la réponse javasenior pour un autre exemple de traitement conditionnel.

    Une autre approche pouvant gérer plusieurs profils consiste à créer un fichier de propriétés distinct pour chaque environnement.

    application-prod.properties

     logging.config=classpath:logback-prod.xml 

    application-dev.properties

     logging.config=classpath:logback-dev.xml 

    application-local.properties

     logging.config=classpath:logback-local.xml 

    SAVOIR

    Si vous ne faites pas attention, vous pourriez vous retrouver dans un endroit inattendu

     -Dspring.profiles.active=local,dev //will use logback-dev.xml -Dspring.profiles.active=dev,local //will use logback-local.xml 

    Au lieu d’append des xml de restauration distincts pour chaque profil ou ayant la condition IF, je suggérerais ce qui suit (si vous avez moins de différence dans les xmls) pour faciliter le traitement conditionnel:

           

    Le traitement conditionnel avec logback sera une solution sans beaucoup de fichiers de consignation. Voici un lien et un exemple de configuration de retour avec des profils de ressort.

               . . appender, logger tags etc. . .     

    En outre, vous devrez peut-être append ceci à votre pom.xml

      org.codehaus.janino janino 3.0.6  

    Spring prend en charge la balise suivante dans le fichier XML Logback, cette balise est décrite ici . Cela signifie que vous pouvez facilement append des variables à partir du fichier de propriétés Spring, même si cette valeur de variable est résolue à partir de la variable d’environnement / système par Spring.