我正在努力将传统的Spring MVC应用程序更新为Spring Boot(部署为WAR)。
一个要求是,为了保持与远程安装的兼容性,logback.xml
文件需要位于已部署的webapp中的以下位置:
webapp/WEB-INF/logback.xml
在项目源代码中,如果我将文件放在src/main/webapp/WEB-INF/logback.xml
中,它会成功复制到webapp/WEB-INF/logback.xml
,但我可以'找到加载它并从该位置使用它的方法。
我已尝试将Spring Boot logging.config
属性设置为以下内容:
logging.config=/WEB-INF/logback.xml
希望自动配置会处理它,但是如果没有错误消息就会失败,而是会加载默认的Spring Boot日志记录配置。
使用Spring Boot处理此问题的正确方法是什么? (欢迎使用示例代码)
答案 0 :(得分:2)
将logback.xml
放入src/main/webapp/WEB-INF/
会导致文件被复制到webapp/WEB-INF/
,这是类路径上webapp/WEB-INF/classes/
以上的目录级别。尝试将其放入application.properties
:
logging.config=classpath:../logback.xml
这种方式logback.xml
将在初始化期间正确定位。请查看Common Application Properties,例如classpath:
的用法,用于表示application.properties
中类路径的位置。
虽然,老实说,我宁愿在logback.xml
中src/main/webapp/WEB-INF/
作为classes/logback.xml
的符号链接(这对于部署是有意义的(并且在您的远程中有用)安装),因为webapp/WEB-INF/logback.xml
将链接到webapp/WEB-INF/classes/logback.xml
)并通过将logback.xml
放入src/main/resources
(webapp/WEB-INF/classes/
中复制$SerialOutput
来保持我的spring-boot应用程序更加传统1}})。由于我不知道您的远程安装的具体情况以及兼容性的含义,这可能会也可能不起作用。
答案 1 :(得分:1)
这结果是需要一个黑客:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
// In case of regular deployments, use WEB-INF/logback.xml
@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
configureLogging(servletContext);
LoggerFactory.getLogger(getClass()).info("Done configuring");
}
// manually configure logging
private void configureLogging(final ServletContext servletContext) {
try {
String realPath = servletContext.getRealPath("/WEB-INF/logback.xml");
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(context);
context.reset();
configurator.doConfigure(realPath);
} catch (JoranException je) {
// StatusPrinter will handle this
}
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
另外,我在src/main/resources
中有 logback-spring.xml :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="logback-include.xml" />
</configuration>
<{1}}中的 logback-include.xml ,它有一些常见的配置:
src/main/resources
最后,导入公共配置的<?xml version="1.0" encoding="UTF-8"?>
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<!-- put your loggers here -->
<logger name="org.springframework.web" additivity="false" level="INFO">
<appender-ref ref="CONSOLE"/>
</logger>
<!-- put your root here -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</included>
中的logback.xml就像logback-spring.xml一样:
src/main/webapp/WEB-INF