如何在Dropwizard(Jersey)中记录JSON响应

Dal*_*and 9 java http jersey dropwizard

我想知道如何配置Dropwizard来记录JSON响应.

Dal*_*and 13

在Service子类(例如HelloWorldService)中,在run方法中添加:

environment.setJerseyProperty(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, LoggingFilter.class.getName());
environment.setJerseyProperty(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, LoggingFilter.class.getName());
Run Code Online (Sandbox Code Playgroud)

然后确保com.sun.jersey.api.container.filter.LoggingFilter(或任何父包)至少在日志级别INFO配置,例如:

logging:
  loggers:
    "com.sun.jersey.api.container.filter.LoggingFilter": INFO
Run Code Online (Sandbox Code Playgroud)


joa*_*ura 10

在dropwizard 0.8.1(也在0.9.0-SNAPSHOT中试过)中,添加到Application.run(...):

import java.util.logging.Logger;
import org.glassfish.jersey.filter.LoggingFilter;
...
public void run(MyApplicationConfiguration conf, Environment env) throws Exception {
    // do your stuff and then add LoggingFilter
    env.jersey().register(new LoggingFilter(
                     Logger.getLogger(LoggingFilter.class.getName()),
                     true)
                 );
}
Run Code Online (Sandbox Code Playgroud)

要配置记录器,请添加配置文件(例如:) conf.yml:

logging:
  loggers:
    org.glassfish.jersey.filter.LoggingFilter: INFO
Run Code Online (Sandbox Code Playgroud)


Cli*_*ote 7

答案有点过时,这是在新版本中需要完成的:

env.jersey().register(new LoggingFeature(logger, LoggingFeature.Verbosity.PAYLOAD_ANY));
Run Code Online (Sandbox Code Playgroud)

哪里logger是java.util.logging.Logger


ele*_*min 5

在dropwizard 0.7.0中,启用请求和响应日志记录的正确语法是:

environment.jersey().property(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, LoggingFilter.class.getName());
environment.jersey().property(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, LoggingFilter.class.getName());
Run Code Online (Sandbox Code Playgroud)