首页 > 解决方案 > 在 Spring Boot 应用程序中使用 applicationinsights 进行日志记录

问题描述

我们正在使用 spring boot 将指标发送到我们正在使用 applicationinsights-logging-log4j2 的应用程序洞察力。

以下是我们在 logj2-spring.xml 中使用的附加程序

*

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{MM-dd-yyyy'T'HH:mm:ss.SSS,UTC} %correlationId [%thread] %-5level %logger{36}- %msg%n"/>
    </Console>
    <ApplicationInsightsAppender name="aiAppender">
    </ApplicationInsightsAppender>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="Console"  />
      <AppenderRef ref="aiAppender"  />
    </Root>
  </Loggers>

我们在应用洞察搜索屏幕中看到了日志,但是我有几个问题。

  1. 有没有一种方法可以在日志中定义自定义信息,如correlationId(用于唯一跟踪流的guid)并将其发送给AI,就像我们在控制台日志中附加一样。

  2. 有没有我们可以为 AI 定义的模式。

  3. 如果我们登录到 AI,是否使用控制台附加程序并登录到控制台。

标签: azurespring-bootazure-application-insights

解决方案


  1. 您可以创建一个将扩展OncePerRequestFilter 的类,并在该类中使用UUID 生成器生成一个Id 并将此UUID 设置在变量中,比如说RequestId。然后写MDC.put('requestid', RequestId)。
    OncePerRequestFilter 类随每个 HTTP 请求执行,您不需要显式调用扩展它的类,并且 MDC.put('requestid', RequestId) 将作为外部属性添加到应用程序洞察日志中。

这只是相关性 ID 的一种解决方法,尽管它为我们提供了相同的功能,我们可以聚合日志。无论生成什么 requestid,您都可以检索它,然后使用它应用程序洞察力来查看该请求的日志。

  1. 我相信控制台附加程序仍然有用,因为 I.AI 我们可以在至少 4 到 5 分钟后看到 loga,因此对于实时调试控制台日志很有帮助。虽然你可以。配置您希望在控制台中查看的日志类型以及您希望发送到 ai 的日志。

在MDC中设置请求Id的值的函数,然后可以从所有类型请求的入口点调用它。


推荐阅读