【发布时间】:2013-06-20 12:23:01
【问题描述】:
我想知道如何配置 Dropwizard 以记录 JSON 响应。
【问题讨论】:
标签: java http jersey dropwizard
我想知道如何配置 Dropwizard 以记录 JSON 响应。
【问题讨论】:
标签: java http jersey dropwizard
在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
【讨论】:
在 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
【讨论】:
答案有点过时了,这就是新版本中需要这样做的方式:
env.jersey().register(new LoggingFeature(logger, LoggingFeature.Verbosity.PAYLOAD_ANY));
其中logger 是java.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());
【讨论】:
日志过滤器已弃用,因此我们应该使用 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;
}
设置关卡就可以了。
【讨论】: