【问题标题】:Spring AOP logger trace ID with Spring Cloud Sleuth?Spring AOP 记录器跟踪 ID 与 Spring Cloud Sleuth?
【发布时间】:2019-02-01 18:27:12
【问题描述】:

我有一些使用 Spring Cloud Sleuth 作为分布式日志管理器运行的微服务。对于一些微服务,Spring AOP 也包括在内,主要是带有@Around 方法执行时间记录的建议(代码如下)。

现在,我可能在这里遗漏了 AOP 点,并且不太明白 @Around 建议何时真正起作用,但是否可以将 Sleuth 跟踪 ID 包含在从 @Aspect 定义的类生成的日志中?

代码:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

@Aspect 类(从org.aspectjorg.slf4j 导入):

@Aspect
@Component
public class PerformanceAspect {

private static final Logger logger = LoggerFactory.getLogger(PerformanceAspect.class);

@Around("@annotation(LogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
    final long start = System.currentTimeMillis();

    final Object proceed = joinPoint.proceed();

    final long executionTime = System.currentTimeMillis() - start;

    logger.debug("\n---- Performance aspect ----\n" +
                "method: {}\n" +
                "execution time: {} [ms]\n" +
                "------------------------\n",
            joinPoint.getSignature().getName(), executionTime);

    return proceed;
    }
} 

Spring Boot 版本为 2.0.7.RELEASE (Spring Cloud Finchley.SR2),相关 (Maven) 依赖项为:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

@LogExecutionTime 设置在一些时间关键的方法上(文件上传到存储、外部 API 调用等),如果用户操作跟踪 ID 也可以设置为方法性能日志记录是非常可取的。

感谢任何帮助,谢谢。

更新:

还有其他日志的跟踪 ID,这里是示例:

January 31st 2019, 09:44:31.024 dev-backend customer-service    31.01.2019 08:44:50 DEBUG [customer-service,f9c173ae7a161cd6,f9c173ae7a161cd6,false] Request for file upload.

紧接着,这里是性能日志(没有跟踪 ID):

January 31st 2019, 09:44:50.532 dev-backend customer-service    method: fileUploadAzure

January 31st 2019, 09:44:50.532 dev-backend customer-service    ---- Performance aspect ----

January 31st 2019, 09:44:50.532 dev-backend customer-service    execution time: 19507 [ms]

两种情况下的导入是:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

配置中的日志记录模式:

logging:
  // other config
  pattern:
    console: "%d{dd.MM.yyyy HH:mm:ss} ${LOG_LEVEL_PATTERN:-%5p} %m%n"

【问题讨论】:

  • 您是否在应用程序的任何其他日志中看到跟踪 ID(即您是否使用正确的日志库和格式规范)?方面并没有任何特殊的地位。
  • 是的,我可以看到它们。我已经用该附加信息更新了问题。
  • 日志格式对我来说看起来不同。你确定是同一个日志系统吗?
  • 我从 Kibana 复制了完整的日志条目,因此“dev-backend customer-service”的第一部分是 Kibana 默认格式条目。 “dev-backend customer-service”后面的部分是我的微服务的日志格式,所以我们可以只关注那部分。
  • 我确定这是同一个日志系统。你想让我提供一些额外的信息或部分代码吗?谢谢。

标签: java logging aop spring-aop spring-cloud-sleuth


【解决方案1】:

解决方案:如果您想使用 Kibana 分析所有行并查看每一行的跟踪 id,请不要在日志中使用行分隔符 (\n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 2021-09-03
    • 1970-01-01
    • 2017-06-08
    • 2021-10-30
    • 2016-11-23
    • 2017-09-13
    • 1970-01-01
    相关资源
    最近更新 更多