logback-spring。无法从 application.yml 读取 属性 值
logback-spring. is unable to read property value from application.yml
我的 logback-spring.xml 从 application.properties 读取正常,但从 application.yml 读取不正常。在我的项目中,我们被要求仅使用 YAML 格式,因为该格式正在同一项目中的其他微服务中使用,因此我无法添加属性文件。请帮助我为什么我的 application.yml 没有被读入 logback.xml
我试过各种方法,在Whosebug上搜索过类似的问题,但没有一个问题有正确答案**。请不要将其标记为重复**。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<property resource ="application.yml"/>
<property name="LOGS" value="./logs" />
<appender name="Console"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
</Pattern>
</layout>
</appender>
<appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/${spring.application.name}.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- LOG everything at INFO level -->
<root level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root>
<!-- LOG "com.baeldung*" at TRACE level -->
<logger name="com.ms" level="trace" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</logger>
</configuration>
以上是我的logback-spring.xml。请参考下面我的 application.yml:-
spring:
application:
name: Logbacking-service
您可以按照文档中的说明在您的 logback 文件中使用下面的内容 here
<springProperty name = "appname" source= "spring.application.name"/>
然后在其他地方使用它
<file>${LOGS}/${appname}.log</file>
我测试了您使用的确切代码,它确实出现了问题,因此上述解决方案应该适用,因为它也适用于我。之前使用您的代码生成的日志文件名称是“appname_IS_UNDEFINED.log”,post 上面的更改名称是“Logbacking-service.log”。
如果您在“org.springframework.core.env.PropertySourcesPropertyResolver
”的 logback 中启用跟踪日志记录级别,您将看到 application.yml 从它读取属性的位置。这将帮助您了解 spring 引导从何处尝试查找配置。如下所示
Searching for key 'spring.profiles.active' in PropertySource 'applicationConfig: [classpath:/application.yml]
我的 logback-spring.xml 从 application.properties 读取正常,但从 application.yml 读取不正常。在我的项目中,我们被要求仅使用 YAML 格式,因为该格式正在同一项目中的其他微服务中使用,因此我无法添加属性文件。请帮助我为什么我的 application.yml 没有被读入 logback.xml
我试过各种方法,在Whosebug上搜索过类似的问题,但没有一个问题有正确答案**。请不要将其标记为重复**。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<property resource ="application.yml"/>
<property name="LOGS" value="./logs" />
<appender name="Console"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
</Pattern>
</layout>
</appender>
<appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/${spring.application.name}.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- LOG everything at INFO level -->
<root level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root>
<!-- LOG "com.baeldung*" at TRACE level -->
<logger name="com.ms" level="trace" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</logger>
</configuration>
以上是我的logback-spring.xml。请参考下面我的 application.yml:-
spring:
application:
name: Logbacking-service
您可以按照文档中的说明在您的 logback 文件中使用下面的内容 here
<springProperty name = "appname" source= "spring.application.name"/>
然后在其他地方使用它
<file>${LOGS}/${appname}.log</file>
我测试了您使用的确切代码,它确实出现了问题,因此上述解决方案应该适用,因为它也适用于我。之前使用您的代码生成的日志文件名称是“appname_IS_UNDEFINED.log”,post 上面的更改名称是“Logbacking-service.log”。
如果您在“org.springframework.core.env.PropertySourcesPropertyResolver
”的 logback 中启用跟踪日志记录级别,您将看到 application.yml 从它读取属性的位置。这将帮助您了解 spring 引导从何处尝试查找配置。如下所示
Searching for key 'spring.profiles.active' in PropertySource 'applicationConfig: [classpath:/application.yml]