web-dev-qa-db-fra.com

Comment écrire des messages de journal dans un fichier en utilisant Spring Boot?

Je veux enregistrer le message dans un fichier et non sur la console. J'utilise Spring Boot et ma configuration est la suivante:

application.properties:

logging.level: DEBUG
logging.level: ERROR
logging.file: ${HOME}/application.log

Je reçois des messages de journal d’INFO uniquement dans mon fichier application.log, mais je veux aussi des messages d’ERREUR et DEBUG.

Mon exigence est que je veux un message ERROR dans le fichier error.log et un message DEBUG dans debug.log et des messages INFO dans info.log

Toute aide est très appreciée.

15
Qasim

Spring Boot vous permet de configurer certains aspects de base de votre système de journalisation à l'aide de application.properties, mais il existe des limits :

Pour configurer les paramètres plus détaillés d'un système de journalisation, vous devez utiliser le format de configuration natif pris en charge par le système de journalisation en question. 

En d'autres termes, si vous souhaitez faire quelque chose qui n'est pas spécifiquement pris en charge par les propriétés, vous ne pourrez pas ajouter ou modifier un fichier logback.xml (en supposant que vous utilisez la consignation).

Alors, passons en revue vos exigences:

  1. "Je souhaite consigner un message dans un fichier, pas sur la console."

Selon les docs :

Par défaut, Spring Boot se connectera uniquement à la console et n'écrira pas les fichiers journaux. Si vous souhaitez écrire les fichiers journaux en plus (soulignement ajouté) dans la sortie de la console, vous devez définir une propriété logging.file ou logging.path (par exemple, dans votre application.properties). 

En d'autres termes, l'enregistrement non sur la console ne peut pas être effectué à l'aide des propriétés.

  1. "Je reçois des messages de journal d'informations uniquement dans mon fichier application.log, mais je souhaite également des messages d'erreur et de débogage."

Par défaut, les journaux Spring Boot au niveau INFO, qui doivent inclure ERROR, êtes-vous sûr que vous êtes non et que vous obtenez les journaux ERROR avec le paramètre par défaut?

En outre, vous spécifiez uniquement le niveau le plus élevé que vous souhaitez consigner, pas chaque niveau, et vous devez spécifier le consignateur sur lequel vous souhaitez définir le niveau.

Cela ne fonctionnera pas:

logging.level: DEBUG
logging.level: ERROR

Voici un exemple de configuration de niveaux de journal personnalisés en fonction de docs :

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERREUR 

Vous pouvez également utiliser la propriété logging.level.* pour définir le niveau du consignateur racine comme suit:

logging.level.ROOT: DEBUG

Notez que la configuration de la journalisation DEBUG sur l’enregistreur ROOT génère une grande quantité de journaux. Je viens de le tester ici et j'ai environ 13 Mo de journaux au démarrage, sans rien faire.

  1. "Je veux un message d'erreur dans le fichier error.log et un message de débogage dans debug.log et des messages d'information dans info.log."

Encore une fois, cela ne peut pas être fait en utilisant uniquement les propriétés. Spring Boot vous permet de configurer exactement une propriété logging.file qui contiendra tous les journaux.

Pour une liste complète des propriétés de journalisation disponibles et des exemples de valeurs, voir ici .

19
ci_

Si vous souhaitez désactiver la journalisation de la console et écrire la sortie uniquement dans un fichier, vous avez besoin d'un fichier personnalisé logback-spring.xml qui importe le fichier file-appender.xml mais pas le fichier console-appender.xml. 

Il est décrit dans Documents de démarrage Spring

1
Sandip Adisare

Au lieu d'utiliser ces propriétés, essayez d'ajouter un fichier logback.xml dans le même dossier que votre application.properties. Configurez logback.xml comme vous en avez besoin pour vous connecter.

0
Jason

Dans votre cas, cela ne fonctionnera pas car vous essayez de définir le niveau d'enregistrement ROOT à plusieurs niveaux.

logging.level: DEBUG
logging.level: ERROR

Ce sont différents niveaux de journalisation et son ordre de minimum << maximum.

OFF << FATAL << ERREUR << AVERTISSEMENT << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, your logs it won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

Merci de passer par cette documentation pour personnaliser vos journaux de manière plus vive.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

0
Hardik Patel