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

本文详细介绍了抽象请求日志记录过滤器类及其子类的功能实现,包括打印日志、写入日志文件和存储上下文信息。讨论了日志信息的配置方式和输出形式,如包含查询语句、客户端信息和负载数据,并通过实例展示了如何在Spring框架中应用这些过滤器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值