Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dinglog-spring-boot-started
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
VCC
dinglog-spring-boot-started
Commits
887fd4bc
Commit
887fd4bc
authored
May 07, 2021
by
data-赵 玉龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改错误信息的传输方式,方便测试环境操作
parent
32c3a47f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
90 additions
and
142 deletions
+90
-142
DingTalkHookLogErrorConfig.java
...quantgroup/dinglog/config/DingTalkHookLogErrorConfig.java
+0
-57
DingTalkLogbackParam.java
...a/cn/quantgroup/dinglog/logback/DingTalkLogbackParam.java
+11
-0
DingTalkLogbackSendMsg.java
...cn/quantgroup/dinglog/logback/DingTalkLogbackSendMsg.java
+8
-9
DingTalkAppenderUnSync.java
...roup/dinglog/logback/appender/DingTalkAppenderUnSync.java
+1
-1
DingTalkSendMsgUtil.java
.../java/cn/quantgroup/dinglog/util/DingTalkSendMsgUtil.java
+8
-5
LogErrorSendMsgUtil.java
.../java/cn/quantgroup/dinglog/util/LogErrorSendMsgUtil.java
+62
-70
No files found.
src/main/java/cn/quantgroup/dinglog/config/DingTalkHookLogErrorConfig.java
deleted
100644 → 0
View file @
32c3a47f
package
cn
.
quantgroup
.
dinglog
.
config
;
import
cn.quantgroup.dinglog.properties.DingTalkWebHookProperties
;
import
cn.quantgroup.dinglog.service.DingTalkSendMsgService
;
import
cn.quantgroup.dinglog.service.impl.DingTalkSendMsgServiceImpl
;
import
cn.quantgroup.dinglog.util.LogErrorSendMsgUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* @Describe:
* @Created by tangfeng 2020-07-07 19:56
*/
@Configuration
//@ConfigurationProperties(prefix = "dinglog.hooke.logerror")
public
class
DingTalkHookLogErrorConfig
{
private
static
String
url
;
private
static
Boolean
enable
=
false
;
/**
* 单线程发送,最大条数200条,超过废弃
*/
@Value
(
"${dinglog.hooke.logerror.enable:false}"
)
public
void
setDomain
(
String
enableString
){
if
(
enableString
==
null
){
return
;
}
if
(
"true"
.
equals
(
enableString
)){
enable
=
true
;
}
else
{
enable
=
false
;
}
}
@Value
(
"${dinglog.hooke.logerror.url:http://127.0.0.1}"
)
public
void
setUrl
(
String
url
){
DingTalkHookLogErrorConfig
.
url
=
url
;
}
public
static
Boolean
isEnable
(){
return
enable
;
}
public
static
void
setEnable
(
boolean
inEnable
){
enable
=
inEnable
;
}
public
static
String
getUrl
(){
return
url
;
}
}
src/main/java/cn/quantgroup/dinglog/logback/DingTalkLogbackParam.java
View file @
887fd4bc
...
...
@@ -18,6 +18,9 @@ public class DingTalkLogbackParam {
private
String
markMsg
;
private
String
collectUrl
;
public
boolean
isSendMsg
()
{
return
sendMsg
;
}
...
...
@@ -65,4 +68,12 @@ public class DingTalkLogbackParam {
public
void
setLogExStackTracePackage
(
String
logExStackTracePackage
)
{
this
.
logExStackTracePackage
=
logExStackTracePackage
;
}
public
String
getCollectUrl
()
{
return
collectUrl
;
}
public
void
setCollectUrl
(
String
collectUrl
)
{
this
.
collectUrl
=
collectUrl
;
}
}
src/main/java/cn/quantgroup/dinglog/logback/DingTalkLogbackSendMsg.java
View file @
887fd4bc
...
...
@@ -36,21 +36,20 @@ public class DingTalkLogbackSendMsg {
}
String
accessToken
=
dingTalkLogbackParam
.
getWebHookAccessToken
();
if
(
StringUtils
.
isEmpty
(
accessToken
))
{
base
.
addInfo
(
"No dingTalk accessToken for the appender named ["
+
appenderName
+
"]."
);
String
collect_url
=
dingTalkLogbackParam
.
getCollectUrl
();
if
(
StringUtils
.
isEmpty
(
accessToken
)
&&
StringUtils
.
isEmpty
(
collect_url
))
{
return
;
}
try
{
//按照格式化日志形式输出
if
(
dingTalkLogbackParam
.
isLayoutLog
()
&&
encoder
.
getLayout
()
!=
null
)
{
String
layoutLog
=
encoder
.
getLayout
().
doLayout
(
event
);
if
(
StringUtils
.
isNotEmpty
(
dingTalkLogbackParam
.
getMarkMsg
()))
{
layoutLog
=
dingTalkLogbackParam
.
getMarkMsg
().
concat
(
"---"
).
concat
(
layoutLog
);
}
DingTalkSendMsgUtil
.
sendTextMsg
(
layoutLog
,
accessToken
);
LogErrorSendMsgUtil
.
sendMsg
(
layoutLog
);
LogErrorSendMsgUtil
.
sendMsg
(
layoutLog
,
collect_url
);
return
;
}
...
...
@@ -69,10 +68,10 @@ public class DingTalkLogbackSendMsg {
if
(
stackTraceElementProxyArray
!=
null
&&
stackTraceElementProxyArray
.
length
>
0
)
{
for
(
int
i
=
0
;
i
<
stackTraceElementProxyArray
.
length
;
i
++)
{
StackTraceElementProxy
st
=
stackTraceElementProxyArray
[
i
];
if
(
StringUtils
.
isNotEmpty
(
dingTalkLogbackParam
.
getLogExStackTracePackage
())
&&
st
.
toString
().
contains
(
dingTalkLogbackParam
.
getLogExStackTracePackage
())
)
{
if
(
st
.
getStackTraceElement
()!=
null
&&
st
.
getStackTraceElement
().
getFileName
()!=
null
&&
st
.
getStackTraceElement
().
getFileName
().
contains
(
"generated"
)
&&
st
.
getStackTraceElement
().
getClassName
()!=
null
&&
st
.
getStackTraceElement
().
getClassName
().
contains
(
"BySpringCGLIB"
))
{
if
(
StringUtils
.
isNotEmpty
(
dingTalkLogbackParam
.
getLogExStackTracePackage
())
&&
st
.
toString
().
contains
(
dingTalkLogbackParam
.
getLogExStackTracePackage
()))
{
if
(
st
.
getStackTraceElement
()
!=
null
&&
st
.
getStackTraceElement
().
getFileName
()
!=
null
&&
st
.
getStackTraceElement
().
getFileName
().
contains
(
"generated"
)
&&
st
.
getStackTraceElement
().
getClassName
()
!=
null
&&
st
.
getStackTraceElement
().
getClassName
().
contains
(
"BySpringCGLIB"
))
{
continue
;
}
sbExMsg
.
append
(
st
.
toString
()).
append
(
"\n"
);
...
...
@@ -87,7 +86,7 @@ public class DingTalkLogbackSendMsg {
message
=
dingTalkLogbackParam
.
getMarkMsg
().
concat
(
"---"
).
concat
(
message
);
}
DingTalkSendMsgUtil
.
sendTextMsg
(
message
,
accessToken
);
LogErrorSendMsgUtil
.
sendMsg
(
message
);
LogErrorSendMsgUtil
.
sendMsg
(
message
,
collect_url
);
}
catch
(
Exception
e
)
{
base
.
addInfo
(
"ding talk logback send msg error:{}"
,
e
);
}
...
...
src/main/java/cn/quantgroup/dinglog/logback/appender/DingTalkAppenderUnSync.java
View file @
887fd4bc
...
...
@@ -41,7 +41,7 @@ public class DingTalkAppenderUnSync extends UnsynchronizedAppenderBase<LoggingEv
@Override
protected
void
append
(
LoggingEvent
event
)
{
DingTalkLogbackSendMsg
.
sendMsg
(
this
,
encoder
,
event
,
name
,
dingTalkLogbackParam
);
DingTalkLogbackSendMsg
.
sendMsg
(
this
,
encoder
,
event
,
name
,
dingTalkLogbackParam
);
}
...
...
src/main/java/cn/quantgroup/dinglog/util/DingTalkSendMsgUtil.java
View file @
887fd4bc
...
...
@@ -22,13 +22,16 @@ public class DingTalkSendMsgUtil {
* 发送json串消息
*/
public
static
boolean
sendTextMsg
(
String
content
,
String
accessToken
)
{
return
sendTextMsg
(
content
,
null
,
accessToken
,
null
);
if
(
accessToken
!=
null
)
{
return
sendTextMsg
(
content
,
null
,
accessToken
,
null
);
}
else
{
return
false
;
}
}
public
static
boolean
sendTextMsgAt
(
String
content
,
String
mobiles
,
String
accessToken
)
{
public
static
boolean
sendTextMsgAt
(
String
content
,
String
mobiles
,
String
accessToken
)
{
return
sendTextMsg
(
content
,
mobiles
,
accessToken
,
null
);
return
sendTextMsg
(
content
,
mobiles
,
accessToken
,
null
);
}
public
static
boolean
sendTextMsg
(
String
content
,
String
mobiles
,
String
accessToken
,
String
keyWords
)
{
...
...
@@ -47,7 +50,7 @@ public class DingTalkSendMsgUtil {
request
.
setMsgtype
(
"text"
);
request
.
setText
(
text
);
if
(
StringUtils
.
isNotEmpty
(
mobiles
)){
if
(
StringUtils
.
isNotEmpty
(
mobiles
))
{
OapiRobotSendRequest
.
At
at
=
new
OapiRobotSendRequest
.
At
();
at
.
setAtMobiles
(
Arrays
.
asList
(
mobiles
.
split
(
","
)));
// isAtAll类型如果不为Boolean,请升级至最新SDK
...
...
src/main/java/cn/quantgroup/dinglog/util/LogErrorSendMsgUtil.java
View file @
887fd4bc
package
cn
.
quantgroup
.
dinglog
.
util
;
import
ch.qos.logback.classic.spi.IThrowableProxy
;
import
ch.qos.logback.classic.spi.StackTraceElementProxy
;
import
cn.quantgroup.dinglog.config.DingTalkHookLogErrorConfig
;
import
com.alibaba.fastjson.JSON
;
import
com.taobao.api.Constants
;
import
com.taobao.api.internal.util.HttpResponseData
;
import
com.taobao.api.internal.util.WebV2Utils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
java.io.IOException
;
import
java.time.LocalDateTime
;
...
...
@@ -29,106 +24,103 @@ import java.util.concurrent.TimeUnit;
*/
public
class
LogErrorSendMsgUtil
{
static
Logger
logger
=
LoggerFactory
.
getLogger
(
LogErrorSendMsgUtil
.
class
);
static
Logger
logger
=
LoggerFactory
.
getLogger
(
LogErrorSendMsgUtil
.
class
);
static
ThreadPoolExecutor
executor
=
new
ThreadPoolExecutor
(
1
,
1
,
5
l
,
TimeUnit
.
MINUTES
,
new
ArrayBlockingQueue
<>(
200
),
new
ThreadFactory
()
{
public
Thread
newThread
(
Runnable
r
)
{
return
new
Thread
(
r
,
"钉钉log错误消息"
);
}
},
new
ThreadPoolExecutor
.
DiscardOldestPolicy
());
static
ThreadPoolExecutor
executor
=
new
ThreadPoolExecutor
(
1
,
1
,
5
l
,
TimeUnit
.
MINUTES
,
new
ArrayBlockingQueue
<>(
200
),
new
ThreadFactory
(){
public
Thread
newThread
(
Runnable
r
)
{
return
new
Thread
(
r
,
"钉钉log错误消息"
);
}},
new
ThreadPoolExecutor
.
DiscardOldestPolicy
());
public
static
void
sendMsg
(
String
msg
,
String
url
,
Throwable
e
)
{
public
static
void
sendMsg
(
String
msg
,
Throwable
e
){
if
(
msg
==
null
)
{
return
;
}
if
(!
DingTalkHookLogErrorConfig
.
isEnable
()){
if
(
msg
==
null
)
{
return
;
}
if
(
e
!=
null
){
msg
=
msg
+
"\n"
+
getStackTraceElementMessage
(
e
);
if
(
e
!=
null
)
{
msg
=
msg
+
"\n"
+
getStackTraceElementMessage
(
e
);
}
sendMsg
(
msg
);
sendMsg
(
msg
,
url
);
}
public
static
String
getStackTraceElementMessage
(
Throwable
ex
)
{
public
static
String
getStackTraceElementMessage
(
Throwable
ex
)
{
int
index
=
0
;
String
errorMessage
=
""
;
StackTraceElement
[]
stackTraceElements
=
ex
.
getStackTrace
();
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
ex
.
fillInStackTrace
()
+
"\n"
);
for
(
StackTraceElement
stackTraceElement:
stackTraceElements
)
{
if
(
index
>
3
)
{
sb
.
append
(
ex
.
fillInStackTrace
()
+
"\n"
);
for
(
StackTraceElement
stackTraceElement
:
stackTraceElements
)
{
if
(
index
>
3
)
{
return
errorMessage
;
}
try
{
try
{
String
className
=
stackTraceElement
.
getClassName
();
String
fileName
=
stackTraceElement
.
getFileName
();
if
(
className
!=
null
&&
className
.
contains
(
"BySpringCGLIB"
)
&&
fileName
!=
null
&&
fileName
.
contains
(
"generated"
))
{
if
(
className
!=
null
&&
className
.
contains
(
"BySpringCGLIB"
)
&&
fileName
!=
null
&&
fileName
.
contains
(
"generated"
))
{
continue
;
}
if
(
className
==
null
||
className
.
contains
(
"quantgroup"
)
||
className
.
contains
(
".qg."
)
||
className
.
contains
(
".xyqb."
)
||
className
.
contains
(
".lkb."
)
||
className
.
contains
(
".liangkebang."
)
)
{
index
++;
String
les
[]
=
stackTraceElement
.
getClassName
().
split
(
"\\."
);
if
(
className
==
null
||
className
.
contains
(
"quantgroup"
)
||
className
.
contains
(
".qg."
)
||
className
.
contains
(
".xyqb."
)
||
className
.
contains
(
".lkb."
)
||
className
.
contains
(
".liangkebang."
)
)
{
index
++;
String
les
[]
=
stackTraceElement
.
getClassName
().
split
(
"\\."
);
// if(les.length>3){
// sb.append("*.").append(les[les.length-3]).append(".").append(les[les.length-2]).append(".").append(les[les.length-1]);
// }else{
sb
.
append
(
stackTraceElement
.
getClassName
());
sb
.
append
(
stackTraceElement
.
getClassName
());
// }
sb
.
append
(
"."
+
stackTraceElement
.
getMethodName
()
+
"("
+
stackTraceElement
.
getFileName
()
+
":"
sb
.
append
(
"."
+
stackTraceElement
.
getMethodName
()
+
"("
+
stackTraceElement
.
getFileName
()
+
":"
+
stackTraceElement
.
getLineNumber
()
+
") \n"
);
errorMessage
=
sb
.
toString
();
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
}
}
return
errorMessage
;
}
public
static
void
sendMsg
(
String
msg
,
String
url
)
{
if
(
url
!=
null
&&
url
.
trim
().
length
()
>
5
)
{
executor
.
execute
(()
->
{
//组装参数,准备发送
// long time = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
String
error_time
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
());
Map
<
String
,
String
>
params
=
new
LinkedHashMap
<>();
params
.
put
(
"error_time"
,
error_time
);
String
project_name
=
System
.
getProperty
(
"@appId"
);
if
(
project_name
==
null
)
{
project_name
=
System
.
getProperty
(
"sun.java.command"
);
String
[]
strings
=
project_name
.
split
(
"\\."
);
project_name
=
strings
[
strings
.
length
-
1
];
}
params
.
put
(
"project_name"
,
project_name
);
params
.
put
(
"env"
,
System
.
getProperty
(
"env"
));
params
.
put
(
"msg"
,
msg
);
HttpResponseData
responseData
=
null
;
logger
.
debug
(
"发送错误信息 url={}, json={}"
,
url
,
JSON
.
toJSONString
(
params
));
try
{
//不关心返回结果
responseData
=
WebV2Utils
.
doPost
(
url
,
params
,
Constants
.
CHARSET_UTF8
,
1000
,
1000
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"访问killbugs发送异常,msg={}"
,
e
.
getLocalizedMessage
());
}
if
(
responseData
.
getBody
()
!=
null
&&
responseData
.
getBody
().
contains
(
"ok"
))
{
logger
.
info
(
"项目名{},环境={},发送成功"
,
project_name
,
System
.
getProperty
(
"env"
));
}
else
{
logger
.
info
(
"项目名{},环境={}, 发送失败"
,
project_name
,
System
.
getProperty
(
"env"
));
}
public
static
void
sendMsg
(
String
msg
){
if
(!
DingTalkHookLogErrorConfig
.
isEnable
()){
return
;
});
}
executor
.
execute
(()->{
//组装参数,准备发送
// long time = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
String
error_time
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
());
Map
<
String
,
String
>
params
=
new
LinkedHashMap
<>();
params
.
put
(
"error_time"
,
error_time
);
String
project_name
=
System
.
getProperty
(
"@appId"
);
if
(
project_name
==
null
){
project_name
=
System
.
getProperty
(
"sun.java.command"
);
String
[]
strings
=
project_name
.
split
(
"\\."
);
project_name
=
strings
[
strings
.
length
-
1
];
}
params
.
put
(
"project_name"
,
project_name
);
params
.
put
(
"env"
,
System
.
getProperty
(
"env"
));
params
.
put
(
"msg"
,
msg
);
HttpResponseData
responseData
=
null
;
logger
.
debug
(
"发送错误信息 url={}, json={}"
,
DingTalkHookLogErrorConfig
.
getUrl
(),
JSON
.
toJSONString
(
params
));
try
{
//不关心返回结果
responseData
=
WebV2Utils
.
doPost
(
DingTalkHookLogErrorConfig
.
getUrl
(),
params
,
Constants
.
CHARSET_UTF8
,
1000
,
1000
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"访问killbugs发送异常,msg={}"
,
e
.
getLocalizedMessage
());
}
if
(
responseData
.
getBody
()!=
null
&&
responseData
.
getBody
().
contains
(
"ok"
)){
logger
.
info
(
"项目名{},环境={},发送成功"
,
project_name
,
System
.
getProperty
(
"env"
));
}
else
{
logger
.
info
(
"项目名{},环境={}, 发送失败"
,
project_name
,
System
.
getProperty
(
"env"
));
}
});
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment