Spring MVC过滤器-上下文信息过滤器(AbstractRequestLoggingFilter及其子类)

        AbstractRequestLoggingFilter类定义了两个方法beforeRequest和afterRequest分别用于设定过滤前后执行的操作,它有三个子类,分别是CommonsRequestLoggingFilter、ServletContextRequestLoggingFilter和Log4jNestedDiagnosticContextFilter,这三个子类分别实现了各自的beforeRequest和afterRequest。其中,CommonsRequestLoggingFilter在过滤前后分别打印出一段debug的信息;ServletContextRequestLoggingFilter在过滤前后分别向日志文件中写入一段日志信息,日志文件可由log4j.properties等指定;Log4jNestedDiagnosticContextFilter则将日志信息存储到NDC中,NDC采用了一个类似栈的机制来push和pot上下文信息,每一个线程都独立地储存上下文信息,比如说一个servlet就可以针对 每一个request创建对应的NDC,储存客户端地址等信息。

        当然,在AbstractRequestLoggingFilter中,还包含很多其他方法:

        setIncludeQueryString:查询语句是否包含在日志文件中,true或false;

        setIncludeClientInfo:客户地址和session id是否包含在日志中,true或false;

        setIncludePayload:负载信息是否包含在日志信息中,true或false;

        setMaxPayloadLength:最大负载量,int值;

        setBeforeMessagePrefix:日志信息前的信息的前缀;

        setBeforeMessageSuffix:日志信息前的信息的后缀;

        setAfterMessagePrefix:日志信息后的信息的前缀;

        setAfterMessageSuffix:日志信息后的信息的后缀。

        以上这些信息均可以在init-param中进行设置。

       日志信息在getBeforeMessage和getAfterMessage方法中通过createMessage创建,然后被doFilterInternal调用,日志信息中至少包含uri信息,其他信息则根据init-param中所设定的值获取,例如,当includeQueryString的值为true时,日志信息中除uri信息外,还包含query string信息。

       由此可以,在spring中已定义的AbstractRequestLoggingFiter的子类过滤器均是用于输入上下文信息,只不过承载的方式不同,其中CommonsRequestLoggingFilter将上下文信息直接打印;ServletContextRequestLoggingFilter将上下文信息写入日志文件;Log4jNestedDiagnosticContextFilter将上下文信息写入NDC中。

你可能感兴趣的:(spring,mvc,session,servlet,String,query)