在OSGi中使用SLF4J记录泽西



我在OSGi(Karaf)中使用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 时,我得到了预期的响应(所以一切似乎都正常了),但没有日志条目告诉我刚刚发出了什么请求/响应。日志记录级别设置为"信息"。

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

最新更新