没有MaxEntitySize的Jersey LoggingFeature

时间:2017-04-26 23:17:08

标签: java logging jersey dropwizard

我使用Dropwizard和Jersey。我创建了一个新的LoggingFeature来记录请求/响应对。 instantiates the LoggingFeature的代码是:

environment.jersey().register(new LoggingFeature(
            kivasLogger, Level.INFO, LoggingFeature.Verbosity.PAYLOAD_TEXT,
            null));

不幸的是,我的有效负载很大,而且正在记录的是...more...,这是我的要求所不能接受的。我需要记录任何大小的有效负载。我可以将上述null maxEntitySize替换为Integer.MAX_VALUE,还是不允许最大实体大小超过内部阈值?

感谢。

1 个答案:

答案 0 :(得分:1)

经过一番挖掘,我找到了我的解决方案,并认为我会在这里发帖与其他遇到此问题的人分享。

我发现LoggingFeature类在内部使用DEFAULT_MAX_ENTITY_SIZE值作为maxEntitySize构造函数参数的默认值。如果参数未在构造函数中设置,则设置此默认值,这不是我上面的问题。在current implementation of LoggingFeature中,DEFAULT_MAX_ENTITY_SIZE的值为8192. maxEntitySize参数可以使用大于DEFAULT_MAX_ENTITY_SIZE的值成功覆盖。我目前使用的maxEntitySize1024 * 1024没有任何问题,...more...附件已不再存在。

但请注意,如果不引发Integer.MAX_VALUE(发生在我身上),我上面提到的NegativeArraySizeException等极大值可能无法使用。

所以基本上,将上面有问题的代码行改为:

environment.jersey().register(new LoggingFeature(
        kivasLogger, Level.INFO, LoggingFeature.Verbosity.PAYLOAD_TEXT,
        1024 * 1024));

为我工作,但有过大值的行如:

environment.jersey().register(new LoggingFeature(
        kivasLogger, Level.INFO, LoggingFeature.Verbosity.PAYLOAD_TEXT,
        Integer.MAX_VALUE));

对我不起作用。