我尝试将 Jersey-Spring4 与 logback 一起使用,但无法通过 将访问日志重定向LoggingFeature
到我的 logback-logger。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
似乎是关键部分。
最后我不知道到底出错了,但这是我猜测的结果,它有效。如果这对任何人有帮助,我很高兴。