当 logging.config 指向 logfj2 外部配置文件的错误文件位置时,spring-boot 应用程序停止
Posted
技术标签:
【中文标题】当 logging.config 指向 logfj2 外部配置文件的错误文件位置时,spring-boot 应用程序停止【英文标题】:spring-boot application stops when logging.config points to incorrect file location for logfj2 external configuartion file 【发布时间】:2017-08-15 02:19:25 【问题描述】:在我的 spring-boot 应用程序中,我已将 log4j2.xml 文件外部化,并使用 application.properties 文件中的 logging.config 属性添加了配置文件的位置。
如果我在 logging.config 中提供了不正确的文件位置,那么我的应用程序将无法启动并引发以下错误:
[main] ERROR org.springframework.boot.SpringApplication - Application startup failed
java.lang.IllegalStateException: java.io.FileNotFoundException: /tmp/log4j2.xml (No such file or directory)
at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:315) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:276) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:239) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:212) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:73) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:336) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
at my.application.Application.main(Application.java:67) [classes/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_60]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_60]
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) [idea_rt.jar:?]
我认为理想情况下应用程序应该使用默认日志记录启动。有没有办法让我可以放入默认日志配置或让 spring-boot 应用程序以默认日志功能启动。
我正在使用 log4j2 和 spring-boot。
【问题讨论】:
【参考方案1】:正如春季文档所说:
可以通过在类路径中包含适当的库来激活各种日志系统,并通过在类路径的根目录中提供合适的配置文件来进一步定制,或者在 Spring 指定的位置环境属性 logging.config。
对于log4j2,配置文件应该是log4j2-spring.xml或者log4j2.xml
所以你可以在你的项目资源目录中添加 log4j2.xml,它会被打包到 jar 文件中,然后会在类路径中。
【讨论】:
以上是关于当 logging.config 指向 logfj2 外部配置文件的错误文件位置时,spring-boot 应用程序停止的主要内容,如果未能解决你的问题,请参考以下文章
springboot 中 logging.config 的 logback默认配置文件地址
logging.config.fileConfig不产生日志