Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Pig
提交
d609e508
P
Pig
项目概览
int
/
Pig
上一次同步 12 个月
通知
8
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Pig
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d609e508
编写于
5月 20, 2022
作者:
pig_冷冷
提交者:
Gitee
5月 20, 2022
浏览文件
操作
浏览文件
下载
差异文件
!231 @SysLog支持spel表达式
Merge pull request !231 from BlackR/blackr_dev
上级
becfaf82
1f61406c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
65 addition
and
2 deletion
+65
-2
pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/annotation/SysLog.java
.../java/com/pig4cloud/pig/common/log/annotation/SysLog.java
+7
-1
pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/aspect/SysLogAspect.java
...ava/com/pig4cloud/pig/common/log/aspect/SysLogAspect.java
+19
-1
pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
...n/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
+39
-0
未找到文件。
pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/annotation/SysLog.java
浏览文件 @
d609e508
...
...
@@ -31,6 +31,12 @@ public @interface SysLog {
* 描述
* @return {String}
*/
String
value
();
String
value
()
default
""
;
/**
* spel 表达式
* @return 日志描述
*/
String
expression
()
default
""
;
}
pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/aspect/SysLogAspect.java
浏览文件 @
d609e508
...
...
@@ -16,6 +16,7 @@
package
com.pig4cloud.pig.common.log.aspect
;
import
cn.hutool.core.util.StrUtil
;
import
com.pig4cloud.pig.admin.api.entity.SysLog
;
import
com.pig4cloud.pig.common.core.util.SpringContextHolder
;
import
com.pig4cloud.pig.common.log.event.SysLogEvent
;
...
...
@@ -26,6 +27,8 @@ import lombok.extern.slf4j.Slf4j;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.springframework.expression.EvaluationContext
;
/**
* 操作日志使用spring event异步入库
...
...
@@ -43,8 +46,23 @@ public class SysLogAspect {
String
strMethodName
=
point
.
getSignature
().
getName
();
log
.
debug
(
"[类名]:{},[方法]:{}"
,
strClassName
,
strMethodName
);
String
value
=
sysLog
.
value
();
String
expression
=
sysLog
.
expression
();
// 当前表达式存在 SPEL,会覆盖 value 的值
if
(
StrUtil
.
isNotBlank
(
expression
))
{
// 解析SPEL
MethodSignature
signature
=
(
MethodSignature
)
point
.
getSignature
();
EvaluationContext
context
=
SysLogUtils
.
getContext
(
point
.
getArgs
(),
signature
.
getMethod
());
try
{
value
=
SysLogUtils
.
getValue
(
context
,
expression
,
String
.
class
);
}
catch
(
Exception
e
)
{
// SPEL 表达式异常,获取 value 的值
log
.
error
(
"@SysLog 解析SPEL {} 异常"
,
expression
);
}
}
SysLog
logVo
=
SysLogUtils
.
getSysLog
();
logVo
.
setTitle
(
sysLog
.
value
()
);
logVo
.
setTitle
(
value
);
// 发送异步日志事件
Long
startTime
=
System
.
currentTimeMillis
();
...
...
pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
浏览文件 @
d609e508
...
...
@@ -21,6 +21,11 @@ import cn.hutool.extra.servlet.ServletUtil;
import
cn.hutool.http.HttpUtil
;
import
com.pig4cloud.pig.admin.api.entity.SysLog
;
import
lombok.experimental.UtilityClass
;
import
org.springframework.core.LocalVariableTableParameterNameDiscoverer
;
import
org.springframework.expression.EvaluationContext
;
import
org.springframework.expression.Expression
;
import
org.springframework.expression.spel.standard.SpelExpressionParser
;
import
org.springframework.expression.spel.support.StandardEvaluationContext
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
import
org.springframework.security.core.Authentication
;
...
...
@@ -31,6 +36,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.lang.reflect.Method
;
import
java.util.Objects
;
/**
...
...
@@ -90,4 +96,37 @@ public class SysLogUtils {
return
authentication
.
getName
();
}
/**
* 获取spel 定义的参数值
*
* @param context 参数容器
* @param key key
* @param clazz 需要返回的类型
* @param <T> 返回泛型
* @return 参数值
*/
public
<
T
>
T
getValue
(
EvaluationContext
context
,
String
key
,
Class
<
T
>
clazz
)
{
SpelExpressionParser
spelExpressionParser
=
new
SpelExpressionParser
();
Expression
expression
=
spelExpressionParser
.
parseExpression
(
key
);
return
expression
.
getValue
(
context
,
clazz
);
}
/**
* 获取参数容器
*
* @param arguments 方法的参数列表
* @param signatureMethod 被执行的方法体
* @return 装载参数的容器
*/
public
EvaluationContext
getContext
(
Object
[]
arguments
,
Method
signatureMethod
)
{
String
[]
parameterNames
=
new
LocalVariableTableParameterNameDiscoverer
().
getParameterNames
(
signatureMethod
);
EvaluationContext
context
=
new
StandardEvaluationContext
();
if
(
parameterNames
==
null
)
{
return
context
;
}
for
(
int
i
=
0
;
i
<
arguments
.
length
;
i
++)
{
context
.
setVariable
(
parameterNames
[
i
],
arguments
[
i
]);
}
return
context
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录