我有一个使用Logback的Spring Boot控制台应用程序.所有属性(对于应用程序以及对于Logback)都被外部化到类路径中的标准application.properties文件中.这些属性在应用程序本身中很好地被选中,但是在logback.xml文件中没有被选中.看起来好像在Spring Boot启动之前处理了logback.xml,因此不会处理EL占位符.
使用FileNamePattern作为示例,在application.properties中,我有这样的事情:
log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
Run Code Online (Sandbox Code Playgroud)
在logback.xml中,我会这样:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.logDirectory}${log.filePattern}.log
</FileNamePattern>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)
运行应用程序时,我会看到以下错误:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 -
RuntimeException in Action for tag [rollingPolicy]
java.lang.IllegalStateException: FileNamePattern
[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]
does not contain a valid DateToken
Run Code Online (Sandbox Code Playgroud)
类似的代码在其他Spring(而不是Spring Boot)应用程序中运行得很好,所以我很好奇Spring Boot的行为有点不同.
感谢@Gary的回复!很高兴知道Spring EL和Logback变量之间的区别......我原以为是Spring负责为我解析这些变量.我确实有元素,但这让我思考.
我的application.properties文件在jar之外,所以Logback不知道在哪里找到它.通过保持我的春节,相关的属性在我的外部application.properties文件,移动日志相关的属性为application-internal.properties文件(位于里面的罐子),并指向的logback到该文件(<property resource="application-internal.properties" />)得到的一切工作正常!
我正在使用带有LogBack的SpringBoot并在我的yml文件中使用以下配置:
logging:
path: C:/var/log/pincode
Run Code Online (Sandbox Code Playgroud)
该logging.path春季环境变量被转移到LOG_PATH环境变量和日志文件被放置在正确的地方,但也有一个叫做目录LOG_PATH_IS_UNDEFINED在我的项目的根目录下创建的.
这似乎是由SpringBoot用于配置LogBack及其Environment变量的不同阶段引起的.
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 …Run Code Online (Sandbox Code Playgroud)