Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey服务器日志记录/w回写_Java_Tomcat_Logging_Jersey_Logback - Fatal编程技术网

Java Jersey服务器日志记录/w回写

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。您可

我如何让Jersey LoggingFilter与logback一起工作?我看到这个帖子:

但不幸的是,它依赖于
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();
}
在my
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的日志中,只是被吞没了但是控制台上的红色日志语句提示我这可能是
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将如何处理这些信息?