首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring记录器追踪ID与Spring探测?

Spring记录器追踪ID与Spring探测?
EN

Stack Overflow用户
提问于 2019-01-31 09:54:22
回答 1查看 1.6K关注 0票数 2

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

现在,我可能在这里忽略了AOP点,并且并不真正理解@Around建议实际上是什么时候开始的,但是是否可以在@Aspect定义类生成的日志中包含探测跟踪ID?

代码:

代码语言:javascript
复制
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

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

代码语言:javascript
复制
@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为2.0.7,related (Spring Finchley.SR2)和相关(Maven)依赖关系如下:

代码语言:javascript
复制
<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,下面是示例:

代码语言:javascript
复制
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):

代码语言:javascript
复制
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]

这两种情况下的进口是:

代码语言:javascript
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

配置日志模式:

代码语言:javascript
复制
logging:
  // other config
  pattern:
    console: "%d{dd.MM.yyyy HH:mm:ss} ${LOG_LEVEL_PATTERN:-%5p} %m%n"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-01 10:27:12

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

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

https://stackoverflow.com/questions/54457824

复制
相关文章

相似问题

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