嵌入式jetty war部署日志以进行回退

时间:2016-10-25 15:34:29

标签: java jetty embedded-jetty

我在我的应用程序中使用了嵌入式Jetty,并且我已经配置了一个war deploy文件夹,如下所示。

        // === jetty-deploy.xml ===

        DeploymentManager deployer = new DeploymentManager();
        deployer.setContexts(contexts);
        deployer.setContextAttribute(
                "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
                ".*/servlet-api-[^/]*\\.jar$");

        WebAppProvider webapp_provider = new WebAppProvider();
        webapp_provider.setMonitoredDirName("jetty_base/webapps");
        //webapp_provider.setDefaultsDescriptor("jetty_base/webapps/webdefault.xml");
        webapp_provider.setScanInterval(1);
        webapp_provider.setExtractWars(true);
        webapp_provider.setConfigurationManager(new PropertiesConfigurationManager());

        deployer.addAppProvider(webapp_provider);
        server.addBean(deployer);


        org.eclipse.jetty.util.log.Log.setLog(new org.eclipse.jetty.util.log.StdErrLog());
        //Log.setLog(new Slf4jLog());

当我使用标准码头分发(jetty-distribution-9.3.6.v20151106)部署war文件时,我可以在* .stderrout.log文件中获取日志。

但我遇到的问题是,当我使用上面的嵌入式码头时,我无法获取日志。 我为Log.setLog

尝试了StdErrLog和Slf4jLog

在我的war文件中有一些带有logback的日志。以下行从标准分发的日志文件中提取

 INFO in ch.qos.logback.classic.LoggerContext[default]

1 个答案:

答案 0 :(得分:2)

Runtime.gc()文件的创建是一个关于码头分布行为的工件,它不适合,不试图实现最终目标。

至于配置日志记录,这需要尽早发生,就像很早就可以实现它一样。如果你能够在Jetty中实例化任何理想的东西之前就能实现它。

尝试的一些选项(仅尝试以下1项,而不是它们的组合)

1)让Jetty记录自动配置

默认情况下,类路径中存在*.stderrlog.log将导致jetty自动配置为slf4j(在您的案例中将使用logback作为其实现)

不要在任何地方打电话给slf4j-api.jar,让码头做其事。

2)早期指定Log.setLog()

尝试将此静态块放在主类中。

Log.setLog()

请勿在其他任何地方致电static { org.eclipse.jetty.util.log.Log.setLog(new Slf4jLog()); }

3)将Log.setLog()添加到类路径

在类路径中创建一个jetty-logging.properties文件(jar文件的根目录是个好地方),添加以下行:

jetty-logging.properties