Java Jersey服务器日志记录/w回写
我如何让Jersey LoggingFilter与logback一起工作?我看到这个帖子: 但不幸的是,它依赖于Java Jersey服务器日志记录/w回写,java,tomcat,logging,jersey,logback,Java,Tomcat,Logging,Jersey,Logback,我如何让Jersey LoggingFilter与logback一起工作?我看到这个帖子: 但不幸的是,它依赖于java.util.Logger。当涉及web.xml配置时,我不是非常精通,因此我不知道如何提供不同的记录器 请注意,我使用Spring3进行依赖项注入,但使用以下代码为每个类创建记录器: Logger-Logger=LoggerFactory.getLogger(MyClass.class) 希望这是足够的信息。如果没有,请告诉我 我的web容器是Tomcat 7.0.12。您可
java.util.Logger
。当涉及web.xml配置时,我不是非常精通,因此我不知道如何提供不同的记录器
请注意,我使用Spring3进行依赖项注入,但使用以下代码为每个类创建记录器:
Logger-Logger=LoggerFactory.getLogger(MyClass.class)代码>
希望这是足够的信息。如果没有,请告诉我
我的web容器是Tomcat 7.0.12。您可以使用桥接器桥接java.util.Logger
对Logback的调用。
安装了它后,您可以使用logback.xml控制Jersey日志记录(以及任何其他JUL)。我尝试将Jersey-Spring4与logback一起使用,但无法通过LoggingFeature将访问日志重定向到我的logback logger。
logback记录器的配置类似于
,我认为这应该可以实现
当我得知泽西正在使用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();
}
在myWebApplicationInitializer.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的日志中,只是被吞没了但是控制台上的红色日志语句提示我这可能是STDERR
,尽管它们是INFO
终于把丢失的那块给了我
我的最终工作ResourceConfig
以
register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.DEFAULT_VERBOSITY, 0));
其中LoggingFeature.DEFAULT\u LOGGER\u NAME
和Level.INFO
似乎是关键部分
最后,我不知道到底出了什么问题,但这是我猜测的结果,它是有效的。如果这对任何人都有帮助,我很高兴。Slf4jLogger
来自org.apache.cxf:cxf core
包是另一种选择。它实现java.util.logging.Logger
并将CAL委托给slf4J
泽西岛服务器:
ResourceConfig config = new ResourceConfig(HelloWorldResource.class);
config.register(
new Slf4jLogger(this.getClass().getName(), null));
泽西岛客户:
ClientBuilder
.newClient()
.register(
new LoggingFeature(
new Slf4jLogger(this.getClass().getName(), null)));
因此,我只是将handlers=org.slf4j.bridge.SLF4JBridgeHandler
添加到我的类路径中的logging.properties
文件中?是的。或者在初始化时以编程方式调用SLF4JBridgeHandler.install(),因此文档中说“一旦安装了SLF4JBridgeHandler,j.u.l.记录器的日志记录将被定向到SLF4J”。这到底是什么意思?我正在使用SLF4J的logback,我的日志被重定向到几个文件。我是否需要不同的配置选项才能捕捉到这一点?我想我是在问SLF4J将如何处理这些信息?