3

我将如何让 Jersey LoggingFilter 与 logback 一起工作?我看到了这个帖子:

如何在服务器上获取球衣日志?

但不幸的是,它依赖于java.util.Logger. 当谈到 web.xml 配置时,我不是很精通,所以我不知道如何去提供init-param不同的记录器。

请注意,我使用 Spring 3 进行依赖注入,但我使用以下代码为每个类创建记录器:

Logger logger = LoggerFactory.getLogger(MyClass.class);

希望这是足够的信息。如果没有,请告诉我。

我的 Web 容器是 Tomcat 7.0.12。

4

3 回答 3

4

我尝试将 Jersey-Spring4 与 logback 一起使用,但无法通过 将访问日志重定向LoggingFeature到我的 logback-logger。logback-logger 的配置类似于<logger name="org.glassfish.jersey" level="INFO"/>,我认为这应该可以解决问题。

在得知 Jersey 使用 JUL 后,我难过几分钟,继续使用org.slf4j:jul-to-slf4j. 为了让它工作,我必须

private void registerLogback(final ServletContext servletContext) {
    servletContext.addListener(new LogbackConfigListener());

    //this is only necessary if you externalise logback.xml from resources     
    try { LogbackConfigurer.initLogging(servletContext.getRealPath("/WEB-INF/logback.xml")); }
    catch (FileNotFoundException | JoranException e) { e.printStackTrace(); }

    LogManager.getLogManager().reset();
    SLF4JBridgeHandler.removeHandlersForRootLogger();
    SLF4JBridgeHandler.install();
}

在我的WebApplicationInitializer.onStartup(ServletContext servletContext).

我的ResourceConfig样子

register(new LoggingFeature(createLogger(), Level.ALL, LoggingFeature.DEFAULT_VERBOSITY, 0)); 

private Logger createLogger() {
    final ConsoleHandler consoleHandler = new ConsoleHandler();
    consoleHandler.setLevel(Level.ALL);

    final Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
    logger.setLevel(Level.ALL);
    logger.addHandler(consoleHandler);

    return logger;
}

什么记录了对控制台的访问。可悲的是,删除ConsoleHandler日志并没有最终导致日志被记录到 logback-logger,只是被吞了。但是控制台上的红色日志语句给了我暗示,这可能是STDERR,尽管他们是INFO

最后LoggingFeature 没有根据构造函数的配置正确记录给了我缺失的部分。

我的期末和工作ResourceConfig结束了

register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.DEFAULT_VERBOSITY, 0));

哪里LoggingFeature.DEFAULT_LOGGER_NAMELevel.INFO似乎是关键部分。

最后我不知道到底出错了,但这是我猜测的结果,它有效。如果这对任何人有帮助,我很高兴。

于 2017-09-22T09:08:14.913 回答
2

您可以java.util.Logger使用jul-to-slf4j桥接对 Logback 的调用。安装后,您可以使用 logback.xml 控制 Jersey 日志记录(和任何其他 JUL)。

于 2012-11-05T21:25:29.187 回答
1

Slf4jLoggerorg.apache.cxf:cxf-core包装是另一种选择。它实现java.util.logging.Logger了 cals 并将其委托给 slf4J。

泽西服务器:

ResourceConfig config = new ResourceConfig(HelloWorldResource.class);
config.register(
    new Slf4jLogger(this.getClass().getName(), null));

泽西岛客户:

ClientBuilder
    .newClient()
    .register(
        new LoggingFeature(
                new Slf4jLogger(this.getClass().getName(), null)));
于 2018-03-20T01:43:12.460 回答