Jersey服务器日志记录/ w Logback

我如何让Jersey LoggingFilter使用logback? 我看到这篇文章:

如何在服务器上获取泽西日志?

但遗憾的是它依赖于java.util.Logger 。 在web.xml配置方面,我不是非常精通,所以我不知道如何提供init-param不同的记录器。

请注意,我使用Spring 3进行dependency injection,但是使用代码为每个类创建记录器:

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

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

我的Web容器是Tomcat 7.0.12。

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

我尝试使用带有logback的Jersey-Spring4,并且无法通过LoggingFeature将访问日志重定向到我的logback-logger。 logback-logger配置为 ,我认为这应该可以解决问题。

在我得知泽西岛正在使用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似乎是关键部分。

最后我不知道到底出了什么问题,但这是我猜测的结果,而且确实有效。 如果这有助于任何人我很高兴。

来自org.apache.cxf:cxf-core Slf4jLogger org.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)));