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

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

在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) ); } 

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

 logging: loggers: org.glassfish.jersey.filter.LoggingFilter: INFO 

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

 environment.setJerseyProperty(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, LoggingFilter.class.getName()); environment.setJerseyProperty(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, LoggingFilter.class.getName()); 

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

 logging: loggers: "com.sun.jersey.api.container.filter.LoggingFilter": INFO 

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

 env.jersey().register(new LoggingFeature(logger, LoggingFeature.Verbosity.PAYLOAD_ANY)); 

loggerjava.util.logging.Logger

在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()); 

不推荐使用日志filter,因此我们应该使用LoggingFeature

不幸的是,我无法使用@Click Upvote的答案

env.jersey().register(new LoggingFeature(logger, LoggingFeature.Verbosity.PAYLOAD_ANY));

以下代码为我工作。 它们对应于不同的构造函数。

  environment.jersey().register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, LoggingFeature.DEFAULT_MAX_ENTITY_SIZE)); 

以下是两种情况下的构造函数。

 public LoggingFeature(Logger logger, Integer maxEntitySize) { this(logger, (Level)null, DEFAULT_VERBOSITY, maxEntitySize); } public LoggingFeature(Logger logger, Level level, LoggingFeature.Verbosity verbosity, Integer maxEntitySize) { this.filterLogger = logger; this.level = level; this.verbosity = verbosity; this.maxEntitySize = maxEntitySize; } 

设置关卡正在诀窍。