我在使用 OSGi (Karaf) 中的 Jersey 查看请求/响应信息时遇到问题。显然 Jersey 使用 JUL 日志记录,因此它必须桥接到 SLF4J 日志记录。我使用以下代码执行此操作:
java.util.logging.Logger rootLogger =
java.util.logging.LogManager.getLogManager().getLogger("");
java.util.logging.Handler[] handlers = rootLogger.getHandlers();
for (int i = 0; i < handlers.length; i++) {
rootLogger.removeHandler(handlers[i]);
}
org.slf4j.bridge.SLF4JBridgeHandler.install();
现在,用 OSGi HttpService 注册 Jersey Servlet,我使用这个:
Dictionary<String, String> initParams = new Hashtable<String, String>();
initParams.put("com.sun.ws.rest.config.property.resourceConfigClass", "com.sun.ws.rest.api.core.PackagesResourceConfig");
initParams.put("com.sun.ws.rest.config.property.packages","jersey_osgi.rest");
initParams.put("com.sun.jersey.spi.container.ContainerRequestFilters",
"com.sun.jersey.api.container.filter.LoggingFilter");
initParams.put("com.sun.jersey.spi.container.ContainerResponseFilters",
"com.sun.jersey.api.container.filter.LoggingFilter");
osgiHttpService.registerServlet("/", servlet, initParams, null);
当我点击 servlet 时,我得到了预期的响应(所以一切似乎都正常运行),但是没有日志条目告诉我刚刚发出了什么请求/响应。日志记录级别设置为 INFO。