Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zlt2000
microservices-platform
提交
230c0daf
microservices-platform
项目概览
zlt2000
/
microservices-platform
11 个月 前同步成功
通知
16
Star
4
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
microservices-platform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
230c0daf
编写于
1月 28, 2021
作者:
zlt2000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化日志链路追踪代码
上级
17d4c192
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
191 addition
and
26 deletion
+191
-26
zlt-commons/zlt-common-spring-boot-starter/src/main/resources/META-INF/spring.factories
...boot-starter/src/main/resources/META-INF/spring.factories
+1
-2
zlt-commons/zlt-log-spring-boot-starter/pom.xml
zlt-commons/zlt-log-spring-boot-starter/pom.xml
+10
-0
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/DubboTraceFilter.java
...src/main/java/com/central/log/trace/DubboTraceFilter.java
+55
-0
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/FeignTraceInterceptor.java
...ain/java/com/central/log/trace/FeignTraceInterceptor.java
+37
-0
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/MDCTraceUtils.java
...er/src/main/java/com/central/log/trace/MDCTraceUtils.java
+66
-0
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/WebTraceFilter.java
...r/src/main/java/com/central/log/trace/WebTraceFilter.java
+17
-14
zlt-commons/zlt-log-spring-boot-starter/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
...ain/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
+1
-0
zlt-commons/zlt-log-spring-boot-starter/src/main/resources/META-INF/spring.factories
...boot-starter/src/main/resources/META-INF/spring.factories
+3
-1
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
.../central/common/ribbon/config/FeignInterceptorConfig.java
+1
-9
未找到文件。
zlt-commons/zlt-common-spring-boot-starter/src/main/resources/META-INF/spring.factories
浏览文件 @
230c0daf
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.central.common.filter.TenantFilter,\
com.central.common.filter.TraceFilter
\ No newline at end of file
com.central.common.filter.TenantFilter
\ No newline at end of file
zlt-commons/zlt-log-spring-boot-starter/pom.xml
浏览文件 @
230c0daf
...
...
@@ -57,5 +57,15 @@
<artifactId>
spring-boot-starter-jdbc
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
io.github.openfeign
</groupId>
<artifactId>
feign-core
</artifactId>
<optional>
true
</optional>
</dependency>
</dependencies>
</project>
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/DubboTraceFilter.java
0 → 100644
浏览文件 @
230c0daf
package
com.central.log.trace
;
import
com.central.log.properties.TraceProperties
;
import
org.apache.dubbo.common.constants.CommonConstants
;
import
org.apache.dubbo.common.extension.Activate
;
import
org.apache.dubbo.rpc.*
;
import
org.springframework.util.StringUtils
;
import
javax.annotation.Resource
;
/**
* dubbo过滤器,传递traceId
*
* @author zlt
* @date 2020/10/14
* <p>
* Blog: https://zlt2000.gitee.io
* Github: https://github.com/zlt2000
*/
@Activate
(
group
=
{
CommonConstants
.
PROVIDER
,
CommonConstants
.
CONSUMER
},
order
=
MDCTraceUtils
.
FILTER_ORDER
)
public
class
DubboTraceFilter
implements
Filter
{
@Resource
private
TraceProperties
traceProperties
;
/**
* 服务消费者:传递traceId给下游服务
* 服务提供者:获取traceId并赋值给MDC
*/
@Override
public
Result
invoke
(
Invoker
<?>
invoker
,
Invocation
invocation
)
throws
RpcException
{
boolean
isProviderSide
=
RpcContext
.
getContext
().
isProviderSide
();
if
(
traceProperties
.
getEnable
())
{
if
(
isProviderSide
)
{
//服务提供者逻辑
String
traceId
=
invocation
.
getAttachment
(
MDCTraceUtils
.
KEY_TRACE_ID
);
if
(!
StringUtils
.
isEmpty
(
traceId
))
{
MDCTraceUtils
.
addTraceId
();
}
else
{
MDCTraceUtils
.
putTraceId
(
traceId
);
}
}
else
{
//服务消费者逻辑
String
traceId
=
MDCTraceUtils
.
getTraceId
();
if
(!
StringUtils
.
isEmpty
(
traceId
))
{
invocation
.
setAttachment
(
MDCTraceUtils
.
KEY_TRACE_ID
,
traceId
);
}
}
}
try
{
return
invoker
.
invoke
(
invocation
);
}
finally
{
if
(
isProviderSide
&&
traceProperties
.
getEnable
())
{
MDCTraceUtils
.
removeTraceId
();
}
}
}
}
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/FeignTraceInterceptor.java
0 → 100644
浏览文件 @
230c0daf
package
com.central.log.trace
;
import
com.central.log.properties.TraceProperties
;
import
feign.RequestInterceptor
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.util.StringUtils
;
import
javax.annotation.Resource
;
/**
* feign拦截器,传递traceId
*
* @author zlt
* @date 2021/1/28
* <p>
* Blog: https://zlt2000.gitee.io
* Github: https://github.com/zlt2000
*/
@ConditionalOnClass
(
value
=
{
RequestInterceptor
.
class
})
public
class
FeignTraceInterceptor
{
@Resource
private
TraceProperties
traceProperties
;
@Bean
public
RequestInterceptor
feignTraceInterceptor
()
{
return
template
->
{
if
(
traceProperties
.
getEnable
())
{
//传递日志traceId
String
traceId
=
MDCTraceUtils
.
getTraceId
();
if
(!
StringUtils
.
isEmpty
(
traceId
))
{
template
.
header
(
MDCTraceUtils
.
TRACE_ID_HEADER
,
traceId
);
}
}
};
}
}
zlt-commons/zlt-log-spring-boot-starter/src/main/java/com/central/log/trace/MDCTraceUtils.java
0 → 100644
浏览文件 @
230c0daf
package
com.central.log.trace
;
import
org.slf4j.MDC
;
import
java.util.UUID
;
/**
* 日志追踪工具类
*
* @author zlt
* @date 2020/10/14
* <p>
* Blog: https://zlt2000.gitee.io
* Github: https://github.com/zlt2000
*/
public
class
MDCTraceUtils
{
/**
* 追踪id的名称
*/
public
static
final
String
KEY_TRACE_ID
=
"traceId"
;
/**
* 日志链路追踪id信息头
*/
public
static
final
String
TRACE_ID_HEADER
=
"x-traceId-header"
;
/**
* filter的优先级,值越低越优先
*/
public
static
final
int
FILTER_ORDER
=
-
1
;
/**
* 创建traceId并赋值MDC
*/
public
static
void
addTraceId
()
{
MDC
.
put
(
KEY_TRACE_ID
,
createTraceId
());
}
/**
* 赋值MDC
*/
public
static
void
putTraceId
(
String
traceId
)
{
MDC
.
put
(
KEY_TRACE_ID
,
traceId
);
}
/**
* 获取MDC中的traceId值
*/
public
static
String
getTraceId
()
{
return
MDC
.
get
(
KEY_TRACE_ID
);
}
/**
* 清除MDC的值
*/
public
static
void
removeTraceId
()
{
MDC
.
remove
(
KEY_TRACE_ID
);
}
/**
* 创建traceId
*/
public
static
String
createTraceId
()
{
return
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
).
toUpperCase
();
}
}
zlt-commons/zlt-
common-spring-boot-starter/src/main/java/com/central/common/filter/
TraceFilter.java
→
zlt-commons/zlt-
log-spring-boot-starter/src/main/java/com/central/log/trace/Web
TraceFilter.java
浏览文件 @
230c0daf
package
com.central.
common.filter
;
package
com.central.
log.trace
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.log.properties.TraceProperties
;
import
org.slf4j.MDC
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.annotation.Resource
;
import
javax.servlet.Filter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
...
...
@@ -16,13 +14,17 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.IOException
;
/**
*
日志链路追踪过滤器
*
web过滤器,生成日志链路追踪id,并赋值MDC
*
* @author zlt
* @date 2019/9/15
* @date 2020/10/14
* <p>
* Blog: https://zlt2000.gitee.io
* Github: https://github.com/zlt2000
*/
@ConditionalOnClass
(
Filter
.
class
)
public
class
TraceFilter
extends
OncePerRequestFilter
{
@ConditionalOnClass
(
value
=
{
HttpServletRequest
.
class
,
OncePerRequestFilter
.
class
})
@Order
(
value
=
MDCTraceUtils
.
FILTER_ORDER
)
public
class
WebTraceFilter
extends
OncePerRequestFilter
{
@Resource
private
TraceProperties
traceProperties
;
...
...
@@ -35,14 +37,15 @@ public class TraceFilter extends OncePerRequestFilter {
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
IOException
,
ServletException
{
try
{
String
traceId
=
request
.
getHeader
(
CommonConstant
.
TRACE_ID_HEADER
);
if
(
StrUtil
.
isNotEmpty
(
traceId
))
{
MDC
.
put
(
CommonConstant
.
LOG_TRACE_ID
,
traceId
);
String
traceId
=
request
.
getHeader
(
MDCTraceUtils
.
TRACE_ID_HEADER
);
if
(
StringUtils
.
isEmpty
(
traceId
))
{
MDCTraceUtils
.
addTraceId
();
}
else
{
MDCTraceUtils
.
putTraceId
(
traceId
);
}
filterChain
.
doFilter
(
request
,
response
);
}
finally
{
MDC
.
remove
(
CommonConstant
.
LOG_TRACE_ID
);
MDC
TraceUtils
.
removeTraceId
(
);
}
}
}
zlt-commons/zlt-log-spring-boot-starter/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
0 → 100644
浏览文件 @
230c0daf
logTrace=com.central.log.trace.DubboTraceFilter
\ No newline at end of file
zlt-commons/zlt-log-spring-boot-starter/src/main/resources/META-INF/spring.factories
浏览文件 @
230c0daf
...
...
@@ -5,4 +5,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.central.log.config.LogAutoConfigure,\
com.central.log.service.impl.LoggerAuditServiceImpl,\
com.central.log.service.impl.DbAuditServiceImpl,\
com.central.log.aspect.AuditLogAspect
com.central.log.aspect.AuditLogAspect,\
com.central.log.trace.WebTraceFilter,\
com.central.log.trace.FeignTraceInterceptor
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
浏览文件 @
230c0daf
package
com.central.common.ribbon.config
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.constant.SecurityConstants
;
import
com.central.common.context.TenantContextHolder
;
import
feign.RequestInterceptor
;
import
org.slf4j.MDC
;
import
org.springframework.context.annotation.Bean
;
/**
...
...
@@ -15,7 +13,7 @@ import org.springframework.context.annotation.Bean;
*/
public
class
FeignInterceptorConfig
{
/**
* 使用feign client访问别的微服务时,将上游传过来的client
、traceid
等信息放入header传递给下一个服务
* 使用feign client访问别的微服务时,将上游传过来的client等信息放入header传递给下一个服务
*/
@Bean
public
RequestInterceptor
baseFeignInterceptor
()
{
...
...
@@ -25,12 +23,6 @@ public class FeignInterceptorConfig {
if
(
StrUtil
.
isNotEmpty
(
tenant
))
{
template
.
header
(
SecurityConstants
.
TENANT_HEADER
,
tenant
);
}
//传递日志traceId
String
traceId
=
MDC
.
get
(
CommonConstant
.
LOG_TRACE_ID
);
if
(
StrUtil
.
isNotEmpty
(
traceId
))
{
template
.
header
(
CommonConstant
.
TRACE_ID_HEADER
,
traceId
);
}
};
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录