web-dev-qa-db-fra.com

Log4j.properties au démarrage du printemps

Comment charger un fichier Log4j.properties personnalisé au démarrage du printemps

Mon code dans application.properties est ici

logging.file=E:/Apps_Tek/apps-webservices-log/apps-webservices.log
logging.level.*=INFO
logging.config=log4j.properties

Mon code dans log4j.properties est ici

log4j.rootLogger=INFO,ConsoleAppender,FileAppender

log4j.appender.ConsoleAppender=org.Apache.log4j.ConsoleAppender
log4j.appender.ConsoleAppender.layout=org.Apache.log4j.PatternLayout
log4j.appender.ConsoleAppender.layout.ConversionPattern=%-7p %d [%t] %c [%X{userName}] [%X{accessToken}] - %m%n

log4j.appender.FileAppender=org.Apache.log4j.RollingFileAppender
log4j.appender.FileAppender.File=E:/Apps_Tek/apps-webservices-log/apps-webservices.log
log4j.appender.FileAppender.layout=org.Apache.log4j.PatternLayout
log4j.appender.FileAppender.layout.ConversionPattern=%-7p %d [%t] %c [%X{userName}] [%X{accessToken}] - %m%n

Mais je ne reçois aucune sortie attendue, c’est-à-dire que le démarrage du printemps ne charge pas le fichier log4j.properties. Le démarrage du printemps a sa propre journalisation par défaut.

le fichier log4j.properties est en src/main/resources

Ma question est de savoir comment mapper le fichier log4j.properties avec la propriété logging.config dans application.properties s’il se trouve dans src/main/resources.

S'il vous plaît suggérer tous les changements nécessaires.

Merci d'avance pour toute aide.

15
Varun Raj

Si vous voulez que spring boot utilise log4j au lieu de sa propre journalisation par défaut (logback), vous devez alors exclure la journalisation par défaut et inclure la dépendance log4j pour le démarrage printanier dans votre pom.xml:

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

de cette façon, votre fichier log4j.properties se trouvera dans src/main/resources.

Aussi, si vous souhaitez utiliser les propriétés définies dans votre application.properties dans le fichier log4j.properties 

par exemple, vous voulez avoir log.file.path défini dans votre application.properties et l'utiliser sur log4j.properties

Ensuite, vous devez définir le filtrage dans votre pom.xml:

<filters>
    <filter>src/main/resources/application.properties</filter>
</filters>
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>log4j.properties</include>
        </includes>         
        <filtering>true</filtering>
    </resource>
</resources>

De cette façon, vous pouvez avoir:

log4j.appender.file.File=${log.file.path}/${project.artifactId}.log

dans votre fichier log4j.properties

37
Diego Marinelli

Mon hypothèse est que votre fichier pom.xml n'est pas configuré pour inclure la dépendance log4j correcte. Si vous faites cela, cela devrait fonctionner automatiquement. Voir leur exemple à spring-boot-sample-actuator-log4j . Leur projet inclut l'artefact spring-boot-starter-log4j qui devrait ensuite permettre à votre fichier log4j.properties d'être récupéré à partir de l'emplacement actuel src/main/resources et vous n'aurez plus besoin des entrées de journalisation. * De vos propriétés. Il se peut également que vous deviez exclure leur journalisation de démarrage, car je constate qu'ils le font également. Si cela ne semble pas résoudre le problème, envoyez votre fichier POM à un endroit où je peux le voir. S'il vous plaît laissez-moi savoir si cela fonctionne pour vous.

1
Rob Baily