我试着用Jersey-Spring4和logback,并且无法通过LoggingFeature
将访问日志重定向到我的logback-logger。 logback-logger的配置类似于<logger name="org.glassfish.jersey" level="INFO"/>
,我认为这应该可以做到。
当我得知泽西岛正在使用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;
}
什么登录访问控制台。可悲的是,在日志被记录到logback-logger的时候,刚刚被吞下了,所以删除了ConsoleHandler
。 但红色在控制台上的日志语句给了我暗示,这可能是STDERR
,虽然他们是INFO
。
最后LoggingFeature not logging correctly based on configuration on constructor给了我失踪的一块。
我最后和工作ResourceConfig
结束了作为
register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.DEFAULT_VERBOSITY, 0));
凡LoggingFeature.DEFAULT_LOGGER_NAME
和Level.INFO
似乎是重要组成部分。
最后,我不知道到底出错了,但这是我猜测的结果,它的工作原理。如果这有助于任何人,我很高兴。
因此,我只是将'handlers = org.slf4j.bridge.SLF4JBridgeHandler'添加到我的类路径中的'logging.properties'文件中? – thatidiotguy
是的。或者通过编程方式在初始化时调用SLF4JBridgeHandler.install() – yossis
因此,文档中提到“一旦安装了SLF4JBridgeHandler,j.u.l.记录器的记录将被引导至SLF4J”。这是什么意思?我正在使用SLF4J的logback,并将我的日志记录重定向到多个文件。我需要不同的配置选项来捕捉这个吗?我想我在问SLF4J将如何处理这些信息? – thatidiotguy