添加业务ID:businessId
配置日志pattern:
logging.pattern.file=${FILE_LOG_PATTERN:%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr([%X{businessId}]){blue} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}} logging.pattern.console=${CONSOLE_LOG_PATTERN:%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr([%X{businessId}]){blue} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}
工具类
public class LogUtil {
public static final String businessId = "businessId";
/**
* 设置businessId
* @param id
*/
public static void setBusinessId(String id) {
MDC.put(businessId, id);
}
/**
* 设置businessId
*/
public static void setBusinessId() {
setBusinessId(UUID.randomUUID().toString());
}
/**
* 获取当前线程的businessId
* @return
*/
public static String getBusinessId() {
String val = MDC.get(businessId);
if (Objects.isNull(val)) {
setBusinessId();
val = MDC.get(businessId);
}
return val;
}
/**
* 给线程池中的子线程设置businessId
*/
public static void setLinkThreadBusinessId() {
Map<String, String> map = MDC.getCopyOfContextMap();
if (Objects.nonNull(map)) {
setBusinessId(map.get(businessId));
}
}
/**
* 清除businessId
*/
public static void removeBusinessId() {
MDC.remove(businessId);
}
}
设置businessId
在拦截器或者切面增强中添加
普通场景
... ... function(...) {
LogUtil.setBusinessId();
... 业务处理 ...
LogUtil.removeBusinessId();
}
多线程场景
// 获取当前线程中的businessId
String businessId = LogUtil.getBusinessId();
// 线程中设置
() -> {
LogUtil.setBusinessId(businessId);
... 业务处理 ...
}