【发布时间】:2016-01-21 17:09:01
【问题描述】:
如何在 EmbeddedServletContainerCustomizer-Bean 中正确配置 LogbackValve 以读取类路径上的文件?
现在我有以下配置,它可以在我的本地主机上完美运行(logging.accessLogConfig: src/main/resources/logback_access_dev.xml 在 application.yml 中设置):
@Configuration
public class TomcatConfiguration {
@Value("${logging.accessLogConfig}")
private String accessLogConfig;
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory containerFactory =
(TomcatEmbeddedServletContainerFactory) container;
LogbackValve logbackValve = new LogbackValve();
logbackValve.setFilename(accessLogConfig);
containerFactory.addContextValves(logbackValve);
}
}
};
}
}
但是一旦我将它作为一个打包的应用程序部署到我的服务器上,该文件就再也找不到了:-WARN in ch.qos.logback.access.tomcat.LogbackValve[] - [src/main/resources/logback_access_dev.xml] does not exist
我也在尝试更改logging.accesslogConfig: classpath:logbook_access_dev.xml,并将内容读取到一个临时文件中,但这也不起作用:
@Configuration
public class TomcatConfiguration {
private static final Logger logger = LoggerFactory.getLogger(TomcatConfiguration.class);
@Value("${logging.accessLogConfig}")
private Resource accessLogConfig;
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory containerFactory =
(TomcatEmbeddedServletContainerFactory) container;
try {
InputStream configuration = accessLogConfig.getInputStream();
File configFile = File.createTempFile(accessLogConfig.getFilename(), "tmp");
FileUtils.copyInputStreamToFile(configuration, configFile);
LogbackValve logbackValve = new LogbackValve();
logbackValve.setFilename(configFile.getAbsolutePath());
containerFactory.addContextValves(logbackValve);
}
catch (IOException e) {
logger.warn("could not read access log configuration {}", accessLogConfig);
}
}
}
};
}
}
我正在使用 Spring Boot 1.2.7.RELEASE 和 logback-access 1.1.3。
非常感谢任何有关如何运行的帮助:)
【问题讨论】:
-
如何指定 logback 配置的位置?
-
在我的 application.yml 中设置:
logging.accessLogConfig: src/main/resources/logback_access_dev.xml(或logging.accessLogConfig: classpath: logback_access_dev.xml) -
你应该只使用类路径版本(类路径上的 src/main/resources ins)
-
正如我已经写过的那样,不幸的是这也不起作用:(
标签: tomcat spring-boot logback access-log