ログバックで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
が肝心なようです。
結局、私は正確に間違っていたのかわかりませんが、これは私の推測の結果であり、うまくいきます。これが誰かの役に立てば、私は幸せです。