Spring引导,在打包的应用程序中使用带有Logback配置文件的Tomcat访问日志

Spring引导,在打包的应用程序中使用带有Logback配置文件的Tomcat访问日志,tomcat,spring-boot,logback,access-log,Tomcat,Spring Boot,Logback,Access Log,如何在EmbeddedServletContainerCustomizer Bean中正确配置LogbackValve以读取类路径上的文件 现在,我已经准备好了以下配置,它可以在本地主机上完美地工作(logging.accessLogConfig:src/main/resources/logback\u access\u dev.xml在application.yml中设置): @配置 公共类TomcatConfiguration{ @值(${logging.accessLogConfig}”)

如何在EmbeddedServletContainerCustomizer Bean中正确配置LogbackValve以读取类路径上的文件

现在,我已经准备好了以下配置,它可以在本地主机上完美地工作(
logging.accessLogConfig:src/main/resources/logback\u access\u dev.xml
在application.yml中设置):

@配置
公共类TomcatConfiguration{
@值(${logging.accessLogConfig}”)
私有字符串accessLogConfig;
@豆子
公共嵌入式ServletContainerCustomizer containerCustomizer(){
返回新的EmbeddedServletContainerCustomizer(){
@凌驾
public void自定义(ConfigurableMbeddedServletContainer){
if(TomcatEmbeddedServletContainerFactory的容器实例){
TomcatEmbeddedServletContainerFactory容器工厂=
(TomcatEmbeddedServletContainerFactory)容器;
LogbackValve LogbackValve=新LogbackValve();
setFilename(accessLogConfig);
容器工厂。添加上下文阀门(logbackValve);
}
}
};
}
}

但一旦我将其作为打包应用程序部署到服务器上,就再也找不到该文件了:
-WARN in ch.qos.logback.access.tomcat.LogbackValve[]-[src/main/resources/logback\u access\u dev.xml]不存在

我也在尝试更改
logging.accesslogConfig:classpath:logbook\u access\u dev.xml
,并将内容读取到临时文件中,但这也不起作用:

@配置
公共类TomcatConfiguration{
私有静态最终记录器Logger=LoggerFactory.getLogger(TomcatConfiguration.class);
@值(${logging.accessLogConfig}”)
私有资源访问日志配置;
@豆子
公共嵌入式ServletContainerCustomizer containerCustomizer(){
返回新的EmbeddedServletContainerCustomizer(){
@凌驾
public void自定义(ConfigurableMbeddedServletContainer){
if(TomcatEmbeddedServletContainerFactory的容器实例){
TomcatEmbeddedServletContainerFactory容器工厂=
(TomcatEmbeddedServletContainerFactory)容器;
试一试{
InputStream配置=accessLogConfig.getInputStream();
File configFile=File.createTempFile(accessLogConfig.getFilename(),“tmp”);
copyInputStreamToFile(配置,配置文件);
LogbackValve LogbackValve=新LogbackValve();
logbackValve.setFilename(configFile.getAbsolutePath());
容器工厂。添加上下文阀门(logbackValve);
}
捕获(IOE异常){
warn(“无法读取访问日志配置{}”,accessLogConfig);
}
}
}
};
}
}

我正在使用Spring Boot 1.2.7.RELEASE和logback access 1.1.3


非常感谢关于如何运行的任何帮助:)

现在通过创建我自己的SpringLogbackValve解决了这个问题,它接受InputStream而不是文件名。它基本上是ch.qos.logback.access.tomcat.LogbackValve的克隆,只是使用了
Inputstream Inputstream
而不是
String fileName
和以下方法:

@Override
public void startInternal() throws LifecycleException {
    executorService = ExecutorServiceUtil.newExecutorService();

    if (inputStream != null) {
        try {
            JoranConfigurator jc = new JoranConfigurator();
            jc.setContext(this);
            jc.doConfigure(inputStream);
        }
        catch (JoranException e) {
            logger.warn("failed to configure {}", inputStream);
        }
    }
    else {
        getStatusManager().add(
                new WarnStatus("[" + inputStream + "] does not exist", this));
    }

    if (!quiet) {
        StatusPrinter.print(getStatusManager());
    }

    started = true;
    setState(LifecycleState.STARTING);
}

现在通过创建我自己的SpringLogbackValve解决了这个问题,它接受InputStream而不是文件名。它基本上是ch.qos.logback.access.tomcat.LogbackValve的克隆,只是使用了
Inputstream Inputstream
而不是
String fileName
和以下方法:

@Override
public void startInternal() throws LifecycleException {
    executorService = ExecutorServiceUtil.newExecutorService();

    if (inputStream != null) {
        try {
            JoranConfigurator jc = new JoranConfigurator();
            jc.setContext(this);
            jc.doConfigure(inputStream);
        }
        catch (JoranException e) {
            logger.warn("failed to configure {}", inputStream);
        }
    }
    else {
        getStatusManager().add(
                new WarnStatus("[" + inputStream + "] does not exist", this));
    }

    if (!quiet) {
        StatusPrinter.print(getStatusManager());
    }

    started = true;
    setState(LifecycleState.STARTING);
}

如何指定logback配置的位置?它是在我的应用程序中设置的。yml:
logging.accessLogConfig:src/main/resources/logback\u access\u dev.xml
(或
logging.accessLogConfig:classpath:logback\u access\u dev.xml
)您应该只使用类路径版本(类路径上的src/main/resources-ins),正如我已经写的那样,不幸的是,这也不起作用:(如何指定logback配置的位置?它在我的应用程序中设置。yml:
logging.accessLogConfig:src/main/resources/logback\u access\u dev.xml
(或
logging.accessLogConfig:classpath:logback\u access\u dev.xml
)您应该只使用classpath版本(src/main/resources-ins-on-classpath)正如我已经写的,不幸的是,这也不起作用:(