我在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。
答案 0 :(得分:0)
尝试将根记录器存储在静态字段中。 Logger
in&#34; java util logging&#34;通常通过软引用存储,因此在您使用SLF4J配置的处理程序之前,可能会对其进行垃圾回收。