在我的SpringBoot应用程序中,我使用CommonsRequestLoggingFilter来记录我所有的传入请求,它工作得很好:
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter() {
@Override
protected boolean shouldLog(HttpServletRequest request) {
}
@Override
protected void beforeRequest(HttpServletRequest request, String message) {
}
@Override
protected void afterRequest(HttpServletRequest request, String message) {
this.logger.debug(message);
}
};
但是为了在Kibana环境中更容易地调试,我想在内核日志中附加一些信息。在我代码的其他地方,我使用StructuredArguments
,它工作得很好:
this.logger.debug(message, keyValue("foo","bar"));
但是在CommonsRequestLoggingFilter中,使用的记录器是org.apache.commons.logging.Log,这不允许我向日志中添加任何参数。
有没有办法覆盖CommonsRequestLoggingFilter中使用的记录器?或者其他想法?
多谢了
1条答案
按热度按时间fruv7luv1#
您无法覆写
CommonsRequestLoggingFilter
中的logger
,因为它是最终的。你至少有两个选择。
第一个方法是创建一个扩展
AbstractRequestLoggingFilter
的新类,并使用它来代替CommonsRequestLoggingFilter
。在这个新类中,您可以做您希望的事情,例如:要继续使用所有的东西,你可以使用
MDC
,添加新的键/值到记录器。这是不一样的,但它会记录的值。你可以,例如,扩展CommonsRequestLoggingFilter
,并把值放在MDC,或在每个“上下文”添加的值,所以记录器会记录它们。扩展
CommonsRequestLoggingFilter
时的示例:如果使用JSON记录器,则方面将大致如下:
样本取自下一个链接,您还可以在此处获得更多详细信息:https://www.innoq.com/en/blog/structured-logging/