J'utilise SpringBoot avec LogBack et j'utilise la configuration ci-dessous dans mon fichier yml:
logging:
path: C:/var/log/pincode
La variable d'environnement logging.path Spring est transférée vers la variable d'environnement LOG_PATH et le fichier journal est placé à l'emplacement correct. Un répertoire appelé LOG_PATH_IS_UNDEFINED est également créé dans le répertoire racine de mon projet.
Cela semble être dû à la phase différente utilisée par SpringBoot pour configurer LogBack avec ses variables d'environnement.
17:29:21,325 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,337 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd}'.
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,343 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:24:07 BRT 2014
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: LOG_PATH_IS_UNDEFINED/catalina.out
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [LOG_PATH_IS_UNDEFINED/catalina.out]
...
17:29:21,358 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
Et puis après cela, il recommence à configurer la consignation, mais cette fois en utilisant le chemin que j’ai défini:
17:29:21,672 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd}'.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:29:21 BRT 2014
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: C:/var/log/pincode//catalina.out
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [C:/var/log/pincode//catalina.out]
...
17:29:21,685 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
Mon logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/basic.xml" />
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex" />
<appender name="serverConsole"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>${LOG_PATH}/catalina.out</File>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/catalina.out.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- Plain Text Rolling Appender -->
<appender name="server"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>${LOG_PATH}/pincode.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/pincode.log.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- Plain Text Rolling Appender -->
<appender name="server-error"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>${LOG_PATH}/pincode-error.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/pincode-error.log.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<logger name="com.app" level="INFO">
<appender-ref ref="server" />
<appender-ref ref="server-error" />
</logger>
<root level="INFO">
<appender-ref ref="serverConsole" />
</root>
Si je supprime mon fichier logback.xml du projet, il ne crée pas le dossier. Par conséquent, quelque part, Spring charge le fichier xml avant d'analyser le fichier yml?
Comment éviter Logback pour créer ce répertoire LOG_PATH_IS_UNDEFINED?
Dans votre cas, LOG_PATH
n'est pas défini au démarrage. Vous devriez utiliser ${LOG_PATH:-.}
à la place, Voir .
Mais si vous définissez logging.path
dans votre application.properties
, vous verrez deux fichiers journaux dans le répertoire .
et dans le répertoire ${logging.path}
.
Ensemble de conteneurs Spring LOG_PATH
après l'initialisation de Logback ... Logback n'est pas pris en charge pour la création de fichiers différés à ma connaissance. Dans ce cas, vous devriez utiliser logback-spring.xml
à la place de logback.xml
.
J'ai fait face à un problème similaire et il est facile de le résoudre. Fondamentalement, Spring Boot vous donne déjà la propriété système - LOG_PATH
pour la propriété Spring Boot - logging.path
afin que vous définissiez logging.path
dans votre application.properties et que vous utilisiez simplement LOG_PATH
dans votre configuration de consignation - logback-spring.xml
.
Vous ne devez pas déclarer logback <property ...>
pour LOG_PATH
, utilisez-le à tout moment.
Voir en bas ici
J'ai rencontré le même problème . Mettre une entrée dans logback.xml
<property resource="application.properties" />
Dans application.properties
FILE_LOG_PATTERN=###
LOG_FILE=###
au démarrage de votre application, le nom du répertoire créé correspond à ce que vous avez défini dans le fichier de propriétés.
Ce n'est peut-être pas votre cas, mais si vous avez bootstrap.properties
, assurez-vous que logging.path
est défini ici et uniquement là.
Essayez d’ajouter ce qui suit à votre fichier POM
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/catalina.base_IS_UNDEFINED</directory>
<includes>
<include>**/*.log</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
Je suppose que vous avez inclus un fichier d’erreur . S'il vous plaît changer
<include resource="org/springframework/boot/logging/logback/basic.xml" />
à
<include resource="org/springframework/boot/logging/logback/base.xml"/>
alors essayez.
mettre une entrée dans le logback:
<property name="DEV_HOME" value="c:/application_logs/ps-web" />
et le référencer:
<fileNamePattern>${DEV_HOME}.%d{yyyy-MM-dd}.log</fileNamePattern>
J'ai eu le même problème depuis que j'ai configuré logging.path et logging.file sur application.properties, mais certains journaux ont été générés avant la configuration de Spring Boot LogBack. Ils ont donc été écrits dans le fichier LOG_PATH_IS_UNDEFINED/LOG_FILE_IS_UNDEFINED, puis les journaux ont été basculés au bon emplacement.
J'ai trouvé 2 solutions possibles:
1) Configurez logging.path et logging.file dans bootstrap.properties car la configuration dans bootstrap a lieu avant
ou
2) Définissez logging.path et logging.file en tant que propriétés système avec -Dlogging.path = ... -Dlogging.file = ... lors du lancement de l'application
si vous utilisez Spring Boot Finchley (2.x), vous pouvez définir spring.application.name
dans votre fichier application.properties
ou application.yml
et ajouter les éléments suivants dans votre configuration Logback:
<configuration>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
</configuration>
vous aurez maintenant ${springAppName}
comme variable à votre disposition pour votre journal pattern
.
Déclarez la propriété LOG_PATH dans votre logback.xml
<property name="LOG_PATH" value="" />
est l'endroit où vous devez spécifier le répertoire dans lequel les fichiers journaux sont créés. Si ce champ est laissé vide, logback créera un nouveau répertoire dans l'exécution du programme. Le nom du répertoire créé est LOG_PATH_IS_UNDEFINED
Avant la préparation de l’environnement Spring Boot, la classe principale Spring Boot ou la SpringApplication
initialisera loggerfactory, qui détectera le fichier de configuration par défaut (logback.groovy
, logback.xml
, logback-test.xml
) mais l’application Spring Boot n’a pas encore démarré. la variable LOG_PATH
n'est pas définie. Au début, vous devez donc modifier le nom de votre fichier de configuration logback et le configurer manuellement dans la configuration du démarrage du ressort en tant que logging.config
. De cette manière, le logback configurera un appender de console par défaut au lieu de créer un appender de fichier, puis lorsque l'environnement Spring Boot sera prêt, il déclenchera un événement enviromentready, ce qui provoquera une reconfiguration de logback par LoggingApplicationListener
. Vous pouvez trouver le problème sur la page de springboot https://github.com/spring-projects/spring-boot/issues/2558
version: 1.5.9
bootstrap.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
application.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
custom-log-configuration: https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration
Pour appeler un logback à partir d'un chemin externe dans un fichier .yml, cela fonctionnait pour moi comme:
enregistrement: config: C: /folder/logback.xml
quelque part, Spring charge le xml avant d'analyser le yml
il suffit donc de renommer logback.xml en your-logback.xml et d'ajouter logging.config=classpath:your-logback.xml
dans votre application.properties