3

Jersey LoggingFilterをログバックで動作させるにはどうすればよいですか?私はこの投稿を見ました:

サーバーでジャージログを取得するにはどうすればよいですか?

しかし、残念ながらそれはに依存していjava.util.Loggerます。私はweb.xml構成に関してはあまり精通していないので、init-paramさまざまなロガーを提供する方法がわかりません。

依存性注入にSpring3を使用していますが、次のコードを使用してクラスごとにロガーを作成していることに注意してください。

Logger logger = LoggerFactory.getLogger(MyClass.class);

これが十分な情報であることを願っています。そうでない場合は、私に知らせてください。

私のWebコンテナはTomcat7.0.12です。

4

3 に答える 3

4

ログバックでJersey-Spring4を使用しようとしましたが、ログLoggingFeatureバックロガーを介してアクセスログをリダイレクトできませんでした。logback-logger は次のように構成<logger name="org.glassfish.jersey" level="INFO"/>されており、これでうまくいくはずだと思いました。

Jersey が JUL を使用していることを知った後、私は数分間悲しくなり、 を使い続けましたorg.slf4j:jul-to-slf4j。それを機能させるために、私はしなければなりませんでした

private void registerLogback(final ServletContext servletContext) {
    servletContext.addListener(new LogbackConfigListener());

    //this is only necessary if you externalise logback.xml from resources     
    try { LogbackConfigurer.initLogging(servletContext.getRealPath("/WEB-INF/logback.xml")); }
    catch (FileNotFoundException | JoranException e) { e.printStackTrace(); }

    LogManager.getLogManager().reset();
    SLF4JBridgeHandler.removeHandlersForRootLogger();
    SLF4JBridgeHandler.install();
}

私の中でWebApplicationInitializer.onStartup(ServletContext servletContext)

私のResourceConfigように見えた

register(new LoggingFeature(createLogger(), Level.ALL, LoggingFeature.DEFAULT_VERBOSITY, 0)); 

private Logger createLogger() {
    final ConsoleHandler consoleHandler = new ConsoleHandler();
    consoleHandler.setLevel(Level.ALL);

    final Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
    logger.setLevel(Level.ALL);
    logger.addHandler(consoleHandler);

    return logger;
}

コンソールへのアクセスを記録したもの。悲しいことに を削除してConsoleHandlerも、logback-logger に記録されるログにはならず、飲み込まれてしまいました。しかし、コンソールに表示された赤いSTDERRログ ステートメントは、実際にそうであったとしても、これが可能性があるというヒントを与えてくれましたINFO

最後に、LoggingFeature がコンストラクターの構成に基づいて正しくログに記録されないため、欠落している部分がありました。

私の最終的な作業ResourceConfigは次のようになりました

register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.DEFAULT_VERBOSITY, 0));

どこLoggingFeature.DEFAULT_LOGGER_NAMEとどこLevel.INFOが肝心なようです。

結局、私は正確に間違っていたのかわかりませんが、これは私の推測の結果であり、うまくいきます。これが誰かの役に立てば、私は幸せです。

于 2017-09-22T09:08:14.913 に答える
2

jul-to-slf4jjava.util.Loggerブリッジを使用して、Logback への呼び出しをブリッジできます。これをインストールすると、logback.xml を使用して Jersey ロギング (およびその他の JUL) を制御できます。

于 2012-11-05T21:25:29.187 に答える