首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CommonsRequestLoggingFilter与logstash StructuredArgument的使用

CommonsRequestLoggingFilter与logstash StructuredArgument的使用
EN

Stack Overflow用户
提问于 2022-02-15 17:11:17
回答 1查看 229关注 0票数 2

在我的SpringBoot应用程序中,我使用CommonsRequestLoggingFilter记录所有无法执行的请求,它运行得很好:

代码语言:javascript
运行
复制
     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,它运行得很好:

代码语言:javascript
运行
复制
this.logger.debug(message, keyValue("foo","bar"));

但是在CommonsRequestLoggingFilter内部,使用的记录器是org.apache.commons.logging.Log,这不允许我向日志添加任何参数。

是否有任何方法覆盖CommonsRequestLoggingFilter中使用的记录器?或者其他的想法?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-23 17:05:48

您不能在logger中覆盖CommonsRequestLoggingFilter,因为它是最终的。

你至少有两个选择。

第一种方法是创建一个扩展AbstractRequestLoggingFilter的新类,并使用它而不是CommonsRequestLoggingFilter。在这个新的班级里,你可以做你想做的事:

代码语言:javascript
运行
复制
    org.slf4j.Logger yourLogger = LoggerFactory.getLogger("MyRequestLoggingFilter");
    ...
    @Override
    protected void afterRequest(HttpServletRequest request, String message) {
       yourLogger.debug(message, keyValue("foo","bar"));
    }

要继续按原样使用所有内容,可以使用MDC,向记录器添加新的键/值。这不是一回事,但它会记录值。例如,您可以扩展CommonsRequestLoggingFilter并将值放在MDC中,或者在每个“上下文”中添加值,这样记录器就会记录它们。

扩展CommonsRequestLoggingFilter的示例

代码语言:javascript
运行
复制
    @Override
    protected void afterRequest(HttpServletRequest request, String message) {
       MDC.put("orderId", "123");
       super.afterRequest(request, message);
       MDC.remove("orderId");
    }

如果使用JSON记录器,则这个方面或多或少是这样的:

代码语言:javascript
运行
复制
{
  ...
  "message": "Some message",
  ...
  "orderId": "123"
}

这些示例是从下一个链接中获取的,您还可以在其中获得更多详细信息:https://www.innoq.com/en/blog/structured-logging/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71130584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档