Démarrage au printemps - pas de fichier journal écrit (journalisation.le dossier n'est pas respecté)
J'utilise le démarrage de printemps et je veux qu'il écrive la sortie de journal dans un fichier.
selon les docs, cela se fait simplement en mettant
logging.file=filename.log
alors que la sortie de la console fonctionne bien, filename.log
n'est pas créé. Aussi, si je crée le fichier manuellement, rien n'est écrit. Que dois-je manquer?
8 réponses
j'ai trouvé une solution. Je n'en suis pas très satisfait car il ne répond toujours pas à ma question initiale pourquoi le logging.file
propriété n'est pas respectée.
j'ai créé le logback-spring.xml
de Georges"réponse dans le même répertoire où application.properties
réside. Selon l' documentation la botte de printemps le récupérera de là. Apparemment, cela ne se produit pas dans mon cas.
je dois en outre ajouter logging.config=classpath:logback-spring.xml
dans l'ordre, il est ramassé par Printemps. Les parties pertinentes de mon application.properties
sont
logging.config=classpath:logback-spring.xml
logging.file=logs/logfile.log
(j'ai créé le logs
répertoire manuellement.)
Je ne sais pas si cela pourrait vous aider mais J'utilise aussi Logback dans mon
Fichier: logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="logback.xsd">
<property resource="\application.properties"/>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${app.logPathPrefix}/myproject.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${app.logPathPrefix}/myproject.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="INFO" />
<logger name="com.mycompany" level="INFO" />
<logger name="org.hibernate" level="DEBUG" />
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
Fichier: application.propriétés
app.logPathPrefix=/var/log/myproject
Voici comment j'ai réussi à écrire la sortie dans un fichier local un fichier.
Pour désactiver la journalisation et l'écriture de la sortie de la console uniquement dans un fichier, vous avez besoin d'un
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
vous devez aussi ajouter ce qui suit à votre application.propriétés:
logging.file=myapplication.log
Notez que ce fichier journal myapplication.journal sera généré par springboot.
voici à quoi ressemble mon arbre de structure d'application:
si vous voulez avoir plus de plaisir, vous pouvez localiser la base.xml dans vos dépendances maven comme ceci:
Si vous utilisez Maven ajouter la dépendance :
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
maintenant vous devez spécifier un fichier qui s'appelle 'log4j.propriétés' que vous devez mettre dans le répertoire spécifique : 'src/main/resources/log4j.propriétés '
Voici comment le fichier devrait être:
# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# log4j.appender.springlog.Threshold=INFO
log4j.appender.springlog.layout=org.apache.log4j.PatternLayout
log4j.appender.springlog.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/example/filename.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
maintenant, importez ceci:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
déclarez une variable logger comme ceci:
final static Logger logger = Logger.getLogger(TheClassYourIn.class);
Et l'utiliser dans la classe comme ceci :
logger.info("Well hello world then ");
de cette façon, ça marche pour moi. J'espère que cette réponse vous aidera . Bonne chance !
PS: log4j.appender.fichier.File= 'directory' est la façon de spécifier où les journaux doivent être stockés. Si vous ne spécifiez pas un répertoire et le laissez comme nom de fichier.log ce fichier sera créé automatiquement dans le projet dir.
j'ai eu le même problème. C'est probablement dû aux permissions de fichiers sur le système de fichiers. J'avais le dossier d'application appartenant à root, mais ./ grumes appartenant au propriétaire du procédé. Par conséquent, les mesures suivantes n'ont pas fonctionné:
journalisation.fichier=ma.journal
mais ce n'
journalisation.fichier=/opt/myapp/logs/ma.journal
je viens d'utiliser le mécanisme de journalisation fourni par la botte de printemps. J'ai écrit ci-dessous dans mon logback.xml fichier :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/file- appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
j'ai mis les deux.propriétés et logback.fichier xml sous le même paquet " src/main/resources. En application.le fichier de propriétés vient d'ajouter un paramètre:
logging.file = xyz.log
ça a très bien fonctionné pour moi.
Dans mon cas, j'ai ajouté un fichier "logback.xml" dans une de mes sous-module par erreur qui a causé ce problème, supprimer et tout ira bien.
si vous êtes sur la botte de printemps, alors vous pouvez directement ajouter les propriétés suivantes dans l'application.propriétés fichier pour définir le niveau de journalisation, personnaliser le modèle de journalisation et stocker les journaux dans le fichier externe.
Ce sont différents niveaux de journalisation et son ordre par rapport au minimum << maximum.
OFF < < FATAL < < ERROR < < WARN < < 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"
veuillez passer par ce lien pour personnaliser vos logs plus vivement.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html