logging - 如何在 Spring Boot 中使用 logback 和 SLF4J 的 MDC 来捕获 POST 请求 json 中的唯一跟踪?

标签 logging spring-boot logback slf4j mdc

我们正在使用:

  • Spring 启动
  • Slf4J
  • 登录
  • ELK 堆栈

现在我们要使用 MDC 将 POST 请求 JSON 中提供的唯一跟踪号添加到给定请求的每个日志语句中。

我用谷歌搜索了一些博客文章,这些对我来说没什么用。

下面是我们正在使用的logback.xml

<configuration>
    <property name="PROJECT_ID" value="template-api"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

任何人都可以提供一些关于如何完成此任务的帮助吗?

最佳答案

抱歉,没有足够的代表来撰写评论。这是更正确、完全有效的代码,基于 @glytching 答案:

@Component
public class MDCFilter extends OncePerRequestFilter {

    @Autowired
    private TrackingnumberGenerator trackGen;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        MDC.put("trackingNumber", trackGen.getTrackingNumber());
        try {
            filterChain.doFilter(request, response);
        } finally {
            MDC.remove("trackingNumber");
        }
    }
}

关于logging - 如何在 Spring Boot 中使用 logback 和 SLF4J 的 MDC 来捕获 POST 请求 json 中的唯一跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961811/

相关文章:

java - 在 JOOQ 中动态构建条件

entity-framework - 在 RavenDB 集合中存储/查询多种类型的最佳方法是什么?

java - 绑定(bind)spring mvc命令对象时如何将多个参数名映射到POJO

java - log4j - 在文件和控制台中显示日志

spring - 如何在多 HttpSecurity 情况下返回 http 状态代码而不是登录页面

java - 可运行 JAR 未检测到 logback.xml 配置

java - Java-在多节点环境中记录最佳实践

logback - 通过 XML 配置文件基于 MDC 设置日志文件名

python - 如果我从 python 中的多个不同进程登录同一个文件会发生什么?

javascript - 如何为 JavaScript 箭头函数创建记录器?