如何使用唯一ID记录错误并在休息响应中发送该ID?

时间:2018-04-06 12:45:32

标签: java spring-boot logging

我正在开发spring boot应用程序,我想在日志文件中记录具有唯一id的异常并发送该id以响应用户,因此用户可以将该id提供给支持团队,他们可以通过搜索这个来从文件获取日志标识。

我正在使用@ControllerAdvice来处理错误全局我正在打印如下所示的日志 我还没有配置记录器,只使用默认的seeting

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

  protected static final Logger logger = LoggerFactory.getLogger(RestResponseEntityExceptionHandler.class);
  logger.error("Error",ex);

ex-是异常对象

其打印日志如下

2018-04-06 17:45:37.566 ERROR [micro-app,912f0faf43795429,912f0faf43795429,false] 8660 --- [nio-9530-exec-1] d.d.c.RestResponseEntityExceptionHandler : Error

javax.ws.rs.ClientErrorException: entity.notFound
    at com.ge.managers.impl.AssetCompanyRelationshipManager.get(AssetCompanyRelationshipManager.java:139) ~[classes/:na]

micro-app是我的应用程序名称,但这里的912f0faf43795429,912f0faf43795429是什么?它是唯一的每个错误,我如何访问它们并发送响应。

如果无法使用此ID作为唯一参考错误请建议可能的approch。

由于

1 个答案:

答案 0 :(得分:0)

考虑使用https://cloud.spring.io/spring-cloud-sleuth/(分布式跟踪)

如果您不想要新库,并且只想使用唯一ID注释每个日志,那么嵌套诊断上下文(NDC)或映射诊断上下文(MDC)将对您有所帮助。一旦收到请求,您需要为每个请求生成单元ID(UUID是合理的默认值),并将此值放在MDC中。实现细节取决于您使用的日志框架

回退示例:https://logback.qos.ch/manual/mdc.html

log4j示例:http://www.baeldung.com/java-logging-ndc-log4j

请注意,请注意子线程不会自动继承MDC / NDC的副本。因此,如果将处理传递给新线程,则需要在MDC / NDC中再次传递和设置值(它在内部使用ThreadLocal)。

配置日志模式时(在记录器配置文件中),可以使用MDC / NCD值。这样,每个日志都将使用您的请求ID进行注释。