代码之家  ›  专栏  ›  技术社区  ›  foo

Java Jersey如何阻止loggingFilter打印?

  •  1
  • foo  · 技术社区  · 7 年前

    我正在使用 jersey loggingFilter 类,该类打印所有请求/响应内容。 以下是过滤器连接代码:

    import org.glassfish.jersey.filter.LoggingFilter;
    import org.glassfish.jersey.jackson.JacksonFeature;
    import org.glassfish.jersey.media.multipart.MultiPartFeature;
    import org.glassfish.jersey.server.ResourceConfig;
    import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
    
    import com.ladpc.mobile.util.CORSResponseFilter;
    import com.ladpc.mobile.util.LoggingResponseFilter;
    
    /**
     * Registers the components to be used by the JAX-RS application
     * 
     * @author ama
     *
     */
    public class MobileApplication extends ResourceConfig {
    
        /**
         * Register JAX-RS application components.
         */
        public MobileApplication() {
            try {
                register(RequestContextFilter.class);
                register(TaskService.class);
                register(LookupService.class);
                register(UsersService.class);
                register(PropertyService.class);
                register(DocumentsPathService.class);
                register(DocumentsService.class);
                register(WorkPlanService.class);
                register(IssueService.class);
                register(ActionTypesService.class);
                register(JacksonFeature.class);
                register(LoggingResponseFilter.class);
                register(MyApplicationEventListener.class);
                registerInstances(new LoggingFilter(Logger.getLogger(MobileApplication.class.getName()), true));
                register(CORSResponseFilter.class);
                register(MultiPartFeature.class);
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    问题:一些响应内容太长,因为它包含图像内容或pdf文件内容的字节数组,所以当客户端多次调用此服务时,日志文件已满,这会导致许多运行问题。 有没有一种方法可以阻止loggingFilter类未自动打印响应的某些服务?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   foo    7 年前

    我发现了。。。 在此行中:

    registerInstances(new LoggingFilter(Logger.getLogger(MobileApplication.class.getName()), true));
    

    有c-tor调用,第二个参数是“boolean printEntity”-如果要打印响应内容,则为true,如果不打印,则为false。。。。

    因此,将此行更改为:

     registerInstances(new LoggingFilter(Logger.getLogger(MobileApplication.class.getName()), false));
    

    可以解决此问题。