在OSGi中使用SLF4J记录Jersey

时间:2012-04-24 18:31:10

标签: logging osgi jersey slf4j

我在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。

1 个答案:

答案 0 :(得分:0)

尝试将根记录器存储在静态字段中。 Logger in&#34; java util logging&#34;通常通过软引用存储,因此在您使用SLF4J配置的处理程序之前,可能会对其进行垃圾回收。