9

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

4

5 回答 5

13

在 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
于 2013-06-21T13:18:22.517 回答
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)
                 );
}

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

logging:
  loggers:
    org.glassfish.jersey.filter.LoggingFilter: INFO
于 2015-06-25T17:00:20.587 回答
9

答案有点过时了,这就是在较新版本中需要这样做的方式:

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

logger一个在哪里java.util.logging.Logger

于 2016-10-23T00:11:46.667 回答
6

在 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());
于 2014-11-24T07:52:48.250 回答
3

不推荐使用日志过滤器,因此我们应该使用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;
}

设置水平就是诀窍。

于 2017-02-13T18:13:15.927 回答