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();

ここで、Jersey Servlet を OSGi HttpService に登録するために、これを使用します。

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);

サーブレットにアクセスすると、期待どおりの応答が得られます (したがって、すべてが稼働しているように見えます) が、作成された要求/応答を示すログ エントリはありません。ログ レベルは INFO に設定されます。

4

1 に答える 1

0

ルート ロガーを静的フィールドに格納してみてください。Logger「java util logging」の s は通常、ソフト参照によって格納されるため、SLF4J で構成されたハンドラーが使用前にガベージ コレクションされる可能性があります。

于 2012-05-23T10:27:48.927 に答える