我如何让Jersey LoggingFilter使用logback?我看到这篇文章:
How to get jersey logs at server?
但不幸的是它依赖于java.util.Logger
。在web.xml配置方面,我不是非常精通,所以我不知道如何提供init-param
个不同的记录器。
请注意,我使用Spring 3进行依赖注入,但是每个类使用代码创建记录器:
Logger logger = LoggerFactory.getLogger(MyClass.class);
希望这是足够的信息。如果没有,请告诉我。
我的网站容器是Tomcat 7.0.12。
答案 0 :(得分:2)
您可以使用jul-to-slf4j网桥将java.util.Logger
电话桥接到Logback。
安装完成后,您可以使用logback.xml控制Jersey日志记录(以及任何其他JUL)。
答案 1 :(得分:2)
我尝试使用Jersey-Spring4进行回溯,但无法通过LoggingFeature
将访问日志重定向到我的logback-logger。
logback-logger配置为<logger name="org.glassfish.jersey" level="INFO"/>
,我认为这应该可以解决问题。
在我得知泽西岛正在使用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的日志中,只是被吞下了。 但是控制台上的 red 日志语句向我提示这可能是STDERR
,尽管它们是INFO
。
最后LoggingFeature not logging correctly based on configuration on constructor给了我一个缺失的部分。
我的最终和工作ResourceConfig
最终成为
register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.DEFAULT_VERBOSITY, 0));
LoggingFeature.DEFAULT_LOGGER_NAME
和Level.INFO
似乎是关键部分。
最后我不知道到底出了什么问题,但这是我猜测的结果,而且确实有效。如果这对任何人都有帮助,我很高兴。
答案 2 :(得分:0)
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)));