web-dev-qa-db-fra.com

Comment rendre log4j2 configurable par environnement en utilisant spring boot 1.3.6.RELEASE

J'aimerais modifier certaines propriétés du fichier log4j2.xml en fonction de my application.properties. Par exemple, définissez certaines propriétés, puis substituez dans le log4j2 les propriétés qui sont des paramètres.

J'ai eu différentes approches mais je n'ai toujours pas la bonne chose à faire. Je voudrais avoir différentes configs en fonction de l'environnement (DEV, QA ou PROD). Est-ce que quelqu'un peut me guider comment accomplir ceci?

Donc, j'essaie d'avoir ceci dans mes propriétés

#Place holders for log4j2.xml file
log.file.path=/opt/Tomcat/logs
log.file.name=dummydummy
log.file.size=100 MB
log.level=DEBUG

Veuillez trouver mon exemple de log4j2 ci-dessous ...

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="PID">????</Property>
        <property name="name">my-log</property>
    </Properties>
    <Appenders>
        <RollingFile name="file" fileName="${log.file.path}${log.file}.log"
            filePattern="${log.file.path}${log.file}-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout
                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID} --- [%t] %c{1}(%M:%L) : %m%n%wEx" />
            <Policies>
                <TimeBasedTriggeringPolicy /><!-- Rotated everyday -->
                <SizeBasedTriggeringPolicy size="${log.file.size}" /> <!-- Or every 100 MB -->
            </Policies>
        </RollingFile>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout
                pattern="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{Magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1}(%M:%L)}{cyan} %clr{:}{faint} %m%n%wEx" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="org.hibernate.validator.internal.util.Version"
            level="warn" />
        <Logger name="org.Apache.coyote.http11.Http11NioProtocol" level="warn" />
        <Logger name="org.Apache.Tomcat.util.net.NioSelectorPool" level="warn" />
        <Logger name="org.Apache.catalina.startup.DigesterFactory" level="error" />
        <Logger name="org.springframework.web" level="error" />

        <Root level="${log.level}">
            <AppenderRef ref="Console" />
            <AppenderRef ref="file" />
        </Root>
    </Loggers>
</Configuration>

Merci

7
Rogelio Blanco

L'élément de recherche properties permet de référencer les propriétés à partir d'un fichier de propriétés externe dans la configuration log4j. Pour votre exemple, cela devrait ressembler à ceci:

  1. Un fichier env.properties contient les propriétés suivantes:

    log.file.path=/opt/Tomcat/logs
    log.file.name=dummydummy
    log.file.size=100 MB
    log.level=DEBUG
    

La recherche de propriétés doit être définie en tant que propriétés de log4j2.xml :

<Configuration>  
  <Properties>  
      <property name="log.file.path">${bundle:env:log.file.path}</property>  
      <property name="log.file.name">${bundle:env:log.file.name}</property>  
      <property name="log.file.size">${bundle:env:log.file.size}</property>  
      <property name="log.level">${bundle:env:log.level}</property>   
  </Properties>  

Désormais, les propriétés peuvent être référencées dans les annexes avec la notation $ {property_name}. Chaque référence de propriété sera interpolée avec la valeur réelle de env.properties .

Vous pouvez trouver un autre exemple de recherche de propriétés ici .

8
asch

Assurez-vous que log4j2 starter est ajouté dans le chemin de classe, puis supprimez les propriétés liées à la journalisation dans application.properties, puis spring chargera votre log4j2.xml à partir du dossier resources. De cette façon, vous pouvez avoir un contrôle total sur la journalisation. Si vous voulez substituer des valeurs alors référez-vous ce lien

Note :: Si vous avez un actionneur dans votre projet, retirez le démarreur de l'enregistreur d'amorçage à ressort

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</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-log4j2</artifactId>
    </dependency>
0
rajadilipkolli