【问题标题】:Logging Jersey using SLF4J in OSGi在 OSGi 中使用 SLF4J 记录 Jersey
【发布时间】:2012-04-24 18:31:09
【问题描述】:

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

【问题讨论】:

    标签: logging osgi jersey slf4j


    【解决方案1】:

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

    【讨论】:

    • 我试过了,但没有用。仍然没有在日志中获得任何请求/响应信息。
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多