2

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

4

1 回答 1

0

尝试将根记录器存储在静态字段中。Logger“java util logging”中的 s 通常通过软引用存储,因此您的 SLF4J 配置的处理程序可能在您使用之前被垃圾收集。

于 2012-05-23T10:27:48.927 回答