From 0595885d71c2714b7e9f5f151d8e47556befe6cb Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Thu, 8 May 2025 09:46:14 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E4=BF=AE=E5=A4=8Dlogbac?= =?UTF-8?q?k=E4=BD=BF=E7=94=A8=E5=BC=82=E6=AD=A5=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=97=B6=EF=BC=8C=E7=A7=9F=E6=88=B7=E5=92=8C?= =?UTF-8?q?url=E4=BF=A1=E6=81=AF=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1416505391022080]修复logback使用异步输出日志时,租户和url信息无法获取 http://192.168.0.96:8090/demo/rdm.html#/bug-detail/939050947543040/939050947543057/1416505391022080 --- .../threadlocal/RequestContext.java | 4 ++++ .../threadlocal/TenantContext.java | 5 +++++ .../logback/converter/RequestUrlConverter.java | 16 ++++++++++++++-- .../logback/converter/TenantConverter.java | 16 ++++++++++++++-- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java b/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java index 5e1141c35..bfd4a4a40 100644 --- a/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java +++ b/src/main/java/neatlogic/framework/asynchronization/threadlocal/RequestContext.java @@ -17,6 +17,7 @@ package neatlogic.framework.asynchronization.threadlocal; import neatlogic.framework.dto.healthcheck.SqlAuditVo; import neatlogic.framework.restful.constvalue.RejectSource; +import org.slf4j.MDC; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -118,6 +119,7 @@ public class RequestContext implements Serializable { context.setUrl(_requestContext.getUrl()); context.setLocale(_requestContext.getLocale()); context.setSqlAuditList(_requestContext.getSqlAuditList()); + MDC.put("url", _requestContext.getUrl()); } instance.set(context); return context; @@ -135,6 +137,7 @@ public class RequestContext implements Serializable { context.setLocale(Locale.getDefault()); } } + MDC.put("url", url); return context; } @@ -152,6 +155,7 @@ public class RequestContext implements Serializable { } public void release() { + MDC.remove("url"); instance.remove(); } diff --git a/src/main/java/neatlogic/framework/asynchronization/threadlocal/TenantContext.java b/src/main/java/neatlogic/framework/asynchronization/threadlocal/TenantContext.java index ce4ba8c4a..f79188203 100644 --- a/src/main/java/neatlogic/framework/asynchronization/threadlocal/TenantContext.java +++ b/src/main/java/neatlogic/framework/asynchronization/threadlocal/TenantContext.java @@ -21,6 +21,7 @@ import neatlogic.framework.dao.mapper.ModuleMapper; import neatlogic.framework.dto.module.ModuleGroupVo; import neatlogic.framework.dto.module.ModuleVo; import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import java.io.Serializable; @@ -59,6 +60,7 @@ public class TenantContext implements Serializable { if (_tenantContext != null) { context.setTenantUuid(_tenantContext.getTenantUuid()); context.setActiveModuleList(_tenantContext.getActiveModuleList()); + MDC.put("tenant", _tenantContext.getTenantUuid()); } instance.set(context); return context; @@ -67,6 +69,7 @@ public class TenantContext implements Serializable { public static TenantContext init(String _tenantUuid) { TenantContext context = new TenantContext(_tenantUuid); instance.set(context); + MDC.put("tenant", _tenantUuid); return context; } @@ -134,6 +137,7 @@ public class TenantContext implements Serializable { activeModuleMap.put(module.getId(), module); } } + MDC.put("tenant", tenantUuid); } return this; } @@ -143,6 +147,7 @@ public class TenantContext implements Serializable { } public void release() { + MDC.remove("tenant"); instance.remove(); } diff --git a/src/main/java/neatlogic/framework/logback/converter/RequestUrlConverter.java b/src/main/java/neatlogic/framework/logback/converter/RequestUrlConverter.java index dafb939ae..9724a25a0 100644 --- a/src/main/java/neatlogic/framework/logback/converter/RequestUrlConverter.java +++ b/src/main/java/neatlogic/framework/logback/converter/RequestUrlConverter.java @@ -18,13 +18,18 @@ package neatlogic.framework.logback.converter; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.ILoggingEvent; import neatlogic.framework.asynchronization.threadlocal.RequestContext; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.util.Map; /** * logback.xml文件使用,日志中输出请求url * @author linbq * @since 2022/1/19 16:08 **/ -public class RequestUrlConverter extends ClassicConverter { +public class RequestUrlConverter extends ClassicConverter implements Serializable { + /** * The convert method is responsible for extracting data from the event and * storing it for later use by the write method. @@ -35,8 +40,15 @@ public class RequestUrlConverter extends ClassicConverter { public String convert(ILoggingEvent event) { RequestContext requestContext = RequestContext.get(); if (requestContext != null) { + System.out.println("RequestUrlConverter requestContext.getUrl() = " + requestContext.getUrl()); return requestContext.getUrl(); + } else { + Map map = event.getMDCPropertyMap(); + String url = map.get("url"); + if (StringUtils.isNotBlank(url)) { + return url; + } } - return ""; + return StringUtils.EMPTY; } } diff --git a/src/main/java/neatlogic/framework/logback/converter/TenantConverter.java b/src/main/java/neatlogic/framework/logback/converter/TenantConverter.java index df2f66d4b..ffbac52ef 100644 --- a/src/main/java/neatlogic/framework/logback/converter/TenantConverter.java +++ b/src/main/java/neatlogic/framework/logback/converter/TenantConverter.java @@ -18,13 +18,18 @@ package neatlogic.framework.logback.converter; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.ILoggingEvent; import neatlogic.framework.asynchronization.threadlocal.TenantContext; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.util.Map; /** * logback.xml文件使用,日志中输出租户信息 * @author linbq * @since 2022/1/19 15:12 **/ -public class TenantConverter extends ClassicConverter { +public class TenantConverter extends ClassicConverter implements Serializable { + /** * The convert method is responsible for extracting data from the event and * storing it for later use by the write method. @@ -36,7 +41,14 @@ public class TenantConverter extends ClassicConverter { TenantContext tenantContext = TenantContext.get(); if (tenantContext != null) { return tenantContext.getTenantUuid(); + } else { + Map map = event.getMDCPropertyMap(); + String tenant = map.get("tenant"); + if (StringUtils.isNotBlank(tenant)) { + return tenant; + } } - return ""; + return StringUtils.EMPTY; } + } -- Gitee