2017-09-12 2 views
8

J'essaie d'utiliser Log4j pour écrire dans un fichier journal local dans mon système de fichiers.log4J n'écrit pas dans un fichier journal spécifique dans le microservice de démarrage Spring

Actuellement utilisé le fichier de propriétés exactes d'un projet différent et juste changé le nom du répertoire de premier niveau pour correspondre au nom de mon application. Le projet différent écrit dans le fichier logs.log mais cela n'imprime aucun contenu. Les deux projets utilisent la même version de log4j.

pom.xml

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
</dependency> 

Sur mon macOS basé sur Unix, je cd'ed dans/var/log/et a fait ce qui suit:

sudo mkdir myapp 
chmod 777 myapp 

Demandez à l'intérieur myapp, la configuration suivante tous sur la place:

if (log.isDebugEnabled() { 
    log.debug("print something"); 
} 

myapp/src/main/resources/log4j.properties:

log4j.rootCategory=DEBUG, RF 

log4j.category.your.category.name=DEBUG 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

log4j.appender.stdout.layout.ConversionPattern=%-5p [%F]: %m [%d{ISO8601}]%n 
log4j.logger.com.amazonaws=DEBUG RF 

log4j.appender.RF=org.apache.log4j.RollingFileAppender 
log4j.appender.RF.File=/var/log/myapp/logs.log 

log4j.appender.RF.MaxFileSize=10MB 
log4j.appender.RF.MaxBackupIndex=30 
log4j.appender.RF.layout=org.apache.log4j.PatternLayout 
log4j.appender.RF.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 
Threshold=DEBUG 

Ne pas comprendre pourquoi l'intérieur:

/var/log/myapp/ 

Il n'y a pas de fichier présent logs.log!

Am en utilisant ce dans une botte de printemps 1.5.4.RELEASE que je construis à l'aide:

mvn clean install 

Et puis exécutez en utilisant soit:

java -jar myapp.jar 

ou

mvn spring-boot:run 

Would apprécier si quelqu'un pourrait me fournir soit un meilleur fichier de propriétés ou de voir ce que je fais mal?

Merci d'avoir pris le temps de lire ceci.

+2

Vous devez exclure la journalisation de démarrage par ressort (logback par défaut) pour permettre la journalisation log4j. Voir ici pour [comment exclure] (https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging) – Veeram

Répondre

3

@Veeram est exact - les journaux sont imprimés par logback, qui vient avec Spring Boot. Vous devez le remplacer par Log4j. Cependant, maintenant il est pas une option:

De Spring Boot 1.4.0 Release Notes:

Log4j 1 support a été supprimé après l'annonce Apache EOL.

Alors je vous suggère de considérer une mise à niveau Log4j 2.

P.S. Je pense que vous pouvez toujours utiliser Log4j 1.2, mais dans ce cas, vous devez définir et spécifier quelles dépendances doivent être exclues du module spring-boot-starter-logging, et lesquelles devraient être ajoutées à la place. J'ai mis en place un projet de démonstration pour reproduire votre problème et voici la liste des dépendances dans build.gradle (je l'utilise Gradle, mais je pense que vous obtenez un point):

dependencies { 
    compile('org.springframework.boot:spring-boot-starter') { 
     exclude group: 'ch.qos.logback' 
     exclude group: 'org.slf4j', module: 'log4j-over-slf4j' 
    } 
    compile('commons-logging:commons-logging:1.2') 
    compile('log4j:log4j:1.2.17') 
    compile('org.slf4j:slf4j-log4j12:1.7.25') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 
1

Comme @mxf dit logback est maintenant le sous-système d'enregistrement par défaut au sein de Spring Boot.

Bien que vous puissiez configurer d'autres enregistreurs, je recommande de rester avec le logback car c'est vraiment un monde d'enregistreurs de commutation de douleur.