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_NAME
和Level.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)));