Commit 709888e4 authored by 赵啸非's avatar 赵啸非

异常日志前端展示添加

parent aefa5c7d
...@@ -59,10 +59,10 @@ CREATE TABLE mortals_xhx_error_log( ...@@ -59,10 +59,10 @@ CREATE TABLE mortals_xhx_error_log(
`traceID` varchar(64) COMMENT '追踪Id', `traceID` varchar(64) COMMENT '追踪Id',
`appName` varchar(64) COMMENT '应用名称,宿主客户端运行唯一标识。', `appName` varchar(64) COMMENT '应用名称,宿主客户端运行唯一标识。',
`hostName` varchar(64) COMMENT '主机名', `hostName` varchar(64) COMMENT '主机名',
`message` varchar(256) COMMENT '消息标识,如用户登录异常。', `message` varchar(1024) COMMENT '消息标识,如用户登录异常。',
`platform` varchar(64) COMMENT '当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)', `platform` varchar(64) COMMENT '当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)',
`culprit` varchar(512) COMMENT '主要导致异常函数或方法调用名称', `culprit` varchar(2048) COMMENT '主要导致异常函数或方法调用名称及入参',
`tags` varchar(512) COMMENT '异常事件标记,多个逗号分隔。用以归集异常事件种类。', `tags` varchar(256) COMMENT '异常事件标记,多个逗号分隔。用以归集异常事件种类。',
`level` varchar(64) COMMENT '等级(FATAL,ERROR,WARNING,INFO,DEBUG)', `level` varchar(64) COMMENT '等级(FATAL,ERROR,WARNING,INFO,DEBUG)',
`environment` varchar(1024) COMMENT '客户端运行环境变量信息', `environment` varchar(1024) COMMENT '客户端运行环境变量信息',
`releaseVersion` varchar(64) COMMENT '客户端运行版本信息', `releaseVersion` varchar(64) COMMENT '客户端运行版本信息',
...@@ -75,10 +75,13 @@ CREATE TABLE mortals_xhx_error_log( ...@@ -75,10 +75,13 @@ CREATE TABLE mortals_xhx_error_log(
`logTime` datetime COMMENT '日志时间', `logTime` datetime COMMENT '日志时间',
`createUserId` bigint(20) COMMENT '创建用户', `createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime NOT NULL COMMENT '创建时间', `createTime` datetime NOT NULL COMMENT '创建时间',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='异常日志'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='异常日志';
-- ---------------------------- -- ----------------------------
-- 平台用户操作日志业务表 -- 平台用户操作日志业务表
-- ---------------------------- -- ----------------------------
......
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
<Field label="线程号" prop="threadNo" v-model="form.threadNo" placeholder="请输入线程号"/> <Field label="线程号" prop="threadNo" v-model="form.threadNo" placeholder="请输入线程号"/>
<Field label="异常事件数量" prop="checkNum" v-model="form.checkNum" placeholder="请输入针对同一个异常事件,数量加1"/> <Field label="异常事件数量" prop="checkNum" v-model="form.checkNum" placeholder="请输入针对同一个异常事件,数量加1"/>
<Field label="日志时间" prop="logTime" v-model="form.logTime" type="date" /> <Field label="日志时间" prop="logTime" v-model="form.logTime" type="date" />
<Field label="异常堆栈信息" :span="24" prop="errorStack" v-model="form.errorStack" rows="6" type="textarea" placeholder="请输入异常堆栈信息"/> <Field label="异常堆栈信息" :span="24" prop="errorStack" v-model="form.errorStack" rows="8" type="textarea" placeholder="请输入异常堆栈信息"/>
<Field label="上下文信息" :span="24" prop="context" v-model="form.context" type="textarea" placeholder="请输入上下文信息,如js中发送异常事件,定位源码中信息。"/> <Field label="上下文信息" :span="24" prop="context" v-model="form.context" type="textarea" rows="6" placeholder="请输入上下文信息,如js中发送异常事件,定位源码中信息。"/>
<Field label="扩展信息" :span="24" prop="extra" v-model="form.extra" type="textarea" placeholder="请输入扩展信息"/> <Field label="扩展信息" :span="24" prop="extra" v-model="form.extra" type="textarea" placeholder="请输入扩展信息"/>
...@@ -34,6 +34,9 @@ ...@@ -34,6 +34,9 @@
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
// import hljs from "highlight.js/lib/highlight";
// import "highlight.js/styles/github-gist.css";
// hljs.registerLanguage("java", require("highlight.js/lib/languages/java"));
export default { export default {
name: "ErrorLogDetail", name: "ErrorLogDetail",
mixins: [form], mixins: [form],
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
<drawer-show ref="drawerform" @ok="getData" /> <drawer-show ref="drawerform" @ok="getData" />
<drawer-view ref="drawerview" @ok="getData" />
</div> </div>
</template> </template>
...@@ -12,11 +14,13 @@ ...@@ -12,11 +14,13 @@
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import drawerShow from "./drawershow"; import drawerShow from "./drawershow";
import drawerView from "./view";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "ErrorLogList", name: "ErrorLogList",
components: { components: {
drawerShow drawerShow,drawerView
}, },
mixins: [table], mixins: [table],
created() { created() {
...@@ -32,7 +36,7 @@ ...@@ -32,7 +36,7 @@
}, },
/** 重写查看方法 */ /** 重写查看方法 */
toView(row) { toView(row) {
this.$refs.drawerform.view(row); this.$refs.drawerview.view(row);
}, },
}, },
...@@ -61,9 +65,9 @@ ...@@ -61,9 +65,9 @@
{label: "应用名称", prop: "appName"}, {label: "应用名称", prop: "appName"},
{label: "主机名", prop: "hostName"}, // {label: "主机名", prop: "hostName"},
{label: "消息标识", prop: "message"}, {label: "消息标识", prop: "message" ,tooltip:"true"},
{label: "当前客户端使用平台", prop: "platform",formatter:this.formatter}, {label: "当前客户端使用平台", prop: "platform",formatter:this.formatter},
......
<template> <template>
<layout-view> <layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border> <el-drawer
<template slot="title"> :title="title"
<i class="el-icon-tickets"></i> :visible.sync="open"
基本详细信息 :direction="direction"
</template> size="75%">
<template slot="extra"> <el-descriptions :column="column" :size="size" :colon="false" border>
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button> <el-descriptions-item label="TraceId" label-class-name="labelClass" content-class-name="contentClass">
</template>
<el-descriptions-item label="追踪Id" label-class-name="labelClass" content-class-name="contentClass">
{{form.traceID}} {{form.traceID}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="应用名称,宿主客户端运行唯一标识。" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="应用标识" label-class-name="labelClass" content-class-name="contentClass">
{{form.appName}} {{form.appName}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="主机名" label-class-name="labelClass" content-class-name="contentClass"> <!-- <el-descriptions-item label="主机名" label-class-name="labelClass" content-class-name="contentClass">
{{form.hostName}} {{form.hostName}}
</el-descriptions-item> </el-descriptions-item> -->
<el-descriptions-item label="消息标识,如用户登录异常。" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="消息标识" label-class-name="labelClass" content-class-name="contentClass">
{{form.message}} {{form.message}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="当前客户端使用平台" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="所属平台" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatters("platform", form.platform) }} {{ form.platform }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="主要导致异常函数或方法调用名称" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="函数调用名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.culprit}} {{form.culprit}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="异常事件标记,多个逗号分隔。用以归集异常事件种类。" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="异常事件标记" label-class-name="labelClass" content-class-name="contentClass">
{{form.tags}} {{form.tags}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="等级" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="告警等级" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatters("level", form.level) }} {{form.level}}
</el-descriptions-item>
<el-descriptions-item label="客户端运行环境变量信息" label-class-name="labelClass" content-class-name="contentClass">
{{form.environment}}
</el-descriptions-item>
<el-descriptions-item label="客户端运行版本信息" label-class-name="labelClass" content-class-name="contentClass">
{{form.releaseVersion}}
</el-descriptions-item>
<el-descriptions-item label="指纹标识,对于相同异常事件归集数量使用。" label-class-name="labelClass" content-class-name="contentClass">
{{form.fingerprint}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="线程号" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="线程号" label-class-name="labelClass" content-class-name="contentClass">
{{form.threadNo}} {{form.threadNo}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="针对同一个异常事件,数量加1" label-class-name="labelClass" content-class-name="contentClass">
{{form.checkNum}}
</el-descriptions-item>
<el-descriptions-item label="异常堆栈信息" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="异常堆栈信息" label-class-name="labelClass" content-class-name="contentClass">
{{form.errorStack}} {{form.errorStack}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="上下文信息,如js中发送异常事件,定位源码中信息。" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="上下文信息" label-class-name="labelClass" content-class-name="contentClass">
{{form.context}} {{form.context}}
</el-descriptions-item>
<el-descriptions-item label="环境变量" label-class-name="labelClass" content-class-name="contentClass">
{{form.environment}}
</el-descriptions-item>
<el-descriptions-item label="版本信息" label-class-name="labelClass" content-class-name="contentClass">
{{form.releaseVersion}}
</el-descriptions-item>
<el-descriptions-item label="指纹标识" label-class-name="labelClass" content-class-name="contentClass">
{{form.fingerprint}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="扩展信息" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="扩展信息" label-class-name="labelClass" content-class-name="contentClass">
{{form.extra}} {{form.extra}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="异常事件数量" label-class-name="labelClass" content-class-name="contentClass">
{{form.checkNum}}
</el-descriptions-item>
<el-descriptions-item label="日志时间" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="日志时间" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.logTime)}} {{form.logTime}}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-drawer>
</layout-view> </layout-view>
</template> </template>
<script> <script>
import view from "@/assets/mixins/view"; import view from "@/assets/mixins/view";
import formatterDate from "@/assets/utils/index.js";
export default { export default {
mixins: [view], mixins: [view],
components: { components: {
}, },
methods: { methods: {
formatterDate,
/** 查看*/
view(row) {
this.query = { id: row.id };
this.urls.currUrl ="error/log/view";
this.getData();
this.pageInfo.type="view"
this.title = "异常日志详细";
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
}, },
data() { data() {
return { return {
size:"small", size:"small",
column:2, column:1,
loading: true,
// 弹出层标题
title: "异常日志",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[ toString:[
], ],
toArrays: [ toArrays: [
], ],
toDate: [ toDate:[
"logTime",
] ],
} }
} }
} }
</script> </script>
<style lang="less"> <style lang="less">
.labelClass{ .labelClass{
width: 200px; width: 250px;
font-size: 13px;
}
.el-descriptions-item__label{
color: #191a1b;
} }
.el-descriptions__body{ .el-descriptions__body{
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
color: #606266; color: #191a1b;
background-color: #FFF; background-color: #FFF;
} }
.contentClass{ .contentClass{
width: 600px; width: 500px;
} }
</style> </style>
\ No newline at end of file
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
{label: "请求地址", prop: "requestUrl"}, {label: "请求地址", prop: "requestUrl"},
{label: "操作内容", prop: "content"}, {label: "操作内容", prop: "content",tooltip:"true"},
{label: "操作IP地址", prop: "ip"}, {label: "操作IP地址", prop: "ip"},
......
...@@ -6,6 +6,7 @@ import com.mortals.xhx.module.access.model.AccessLogEntity; ...@@ -6,6 +6,7 @@ import com.mortals.xhx.module.access.model.AccessLogEntity;
import com.mortals.xhx.module.biz.model.BizLogEntity; import com.mortals.xhx.module.biz.model.BizLogEntity;
import com.mortals.xhx.module.biz.service.BizLogService; import com.mortals.xhx.module.biz.service.BizLogService;
import com.mortals.xhx.module.error.model.ErrorLogEntity; import com.mortals.xhx.module.error.model.ErrorLogEntity;
import com.mortals.xhx.module.error.model.ErrorLogQuery;
import com.mortals.xhx.module.error.service.ErrorLogService; import com.mortals.xhx.module.error.service.ErrorLogService;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -15,6 +16,7 @@ import org.springframework.amqp.support.AmqpHeaders; ...@@ -15,6 +16,7 @@ import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.Headers; import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -41,12 +43,31 @@ public class ErrorMessageConsumerListener { ...@@ -41,12 +43,31 @@ public class ErrorMessageConsumerListener {
public void onMessage(List<String> messages) throws Exception { public void onMessage(List<String> messages) throws Exception {
log.info("[onMessage][线程编号:{} 消息数量:{}]", Thread.currentThread().getId(), messages.size()); log.info("[onMessage][线程编号:{} 消息数量:{}]", Thread.currentThread().getId(), messages.size());
List<ErrorLogEntity> collect = messages.stream().map(str -> { messages.stream().peek(str -> {
ErrorLogEntity entity = JSON.parseObject(str, ErrorLogEntity.class); ErrorLogEntity entity = JSON.parseObject(str, ErrorLogEntity.class);
entity.setCreateUserId(1L); entity.setCreateUserId(1L);
entity.setCreateTime(new Date()); entity.setCreateTime(new Date());
return entity;
}).collect(Collectors.toList()); if (!ObjectUtils.isEmpty(entity.getFingerprint())) {
errorLogService.save(collect); //// TODO: 2022/8/24 指纹匹配
} else {
//比较message platform appname 如果相同 则checknum+1 并更新日志时间
ErrorLogQuery errorLogQuery = new ErrorLogQuery();
errorLogQuery.setAppName(entity.getAppName());
errorLogQuery.setPlatform(entity.getPlatform());
errorLogQuery.setMessage(entity.getMessage());
ErrorLogEntity errorLogEntity = errorLogService.selectOne(errorLogQuery, null);
if (!ObjectUtils.isEmpty(errorLogEntity)) {
errorLogEntity.setCheckNum(errorLogEntity.getCheckNum()+1);
errorLogEntity.setLogTime(entity.getLogTime());
errorLogEntity.setThreadNo(entity.getThreadNo());
errorLogEntity.setUpdateTime(new Date());
errorLogService.update(errorLogEntity);
} else {
errorLogService.save(entity);
}
}
}).count();
} }
} }
package com.mortals.xhx.module.error.dao.ibatis; package com.mortals.xhx.module.error.dao.ibatis;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.error.dao.ErrorLogDao; import com.mortals.xhx.module.error.dao.ErrorLogDao;
import com.mortals.xhx.module.error.model.ErrorLogEntity; import com.mortals.xhx.module.error.model.ErrorLogEntity;
...@@ -48,4 +50,15 @@ public class ErrorLogDaoImpl extends SubmeterDaoImpl<ErrorLogEntity,Long> implem ...@@ -48,4 +50,15 @@ public class ErrorLogDaoImpl extends SubmeterDaoImpl<ErrorLogEntity,Long> implem
@Override
public ErrorLogEntity get(Long id) {
ErrorLogEntity errorLogEntity = new ErrorLogEntity();
Snowflake snowflake = IdUtil.getSnowflake(0, 1);
long generateDateTime = snowflake.getGenerateDateTime(id);
errorLogEntity.setCreateTime(new Date(generateDateTime));
return this.get(id,errorLogEntity);
}
} }
...@@ -8,322 +8,322 @@ import com.mortals.framework.annotation.Excel; ...@@ -8,322 +8,322 @@ import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.error.model.vo.ErrorLogVo; import com.mortals.xhx.module.error.model.vo.ErrorLogVo;
/** /**
* 异常日志实体对象 * 异常日志实体对象
* *
* @author zxfei * @author zxfei
* @date 2022-08-24 * @date 2022-08-24
*/ */
public class ErrorLogEntity extends ErrorLogVo { public class ErrorLogEntity extends ErrorLogVo {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* 追踪Id * 追踪Id
*/ */
private String traceID; private String traceID;
/** /**
* 应用名称,宿主客户端运行唯一标识。 * 应用名称,宿主客户端运行唯一标识。
*/ */
private String appName; private String appName;
/** /**
* 主机名 * 主机名
*/ */
private String hostName; private String hostName;
/** /**
* 消息标识,如用户登录异常。 * 消息标识,如用户登录异常。
*/ */
private String message; private String message;
/** /**
* 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
*/ */
private String platform; private String platform;
/** /**
* 主要导致异常函数或方法调用名称 * 主要导致异常函数或方法调用名称及入参
*/ */
private String culprit; private String culprit;
/** /**
* 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 异常事件标记,多个逗号分隔。用以归集异常事件种类。
*/ */
private String tags; private String tags;
/** /**
* 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
*/ */
private String level; private String level;
/** /**
* 客户端运行环境变量信息 * 客户端运行环境变量信息
*/ */
private String environment; private String environment;
/** /**
* 客户端运行版本信息 * 客户端运行版本信息
*/ */
private String releaseVersion; private String releaseVersion;
/** /**
* 指纹标识,对于相同异常事件归集数量使用。 * 指纹标识,对于相同异常事件归集数量使用。
*/ */
private String fingerprint; private String fingerprint;
/** /**
* 线程号 * 线程号
*/ */
private String threadNo; private String threadNo;
/** /**
* 针对同一个异常事件,数量加1 * 针对同一个异常事件,数量加1
*/ */
private Integer checkNum; private Integer checkNum;
/** /**
* 异常堆栈信息 * 异常堆栈信息
*/ */
private String errorStack; private String errorStack;
/** /**
* 上下文信息,如js中发送异常事件,定位源码中信息。 * 上下文信息,如js中发送异常事件,定位源码中信息。
*/ */
private String context; private String context;
/** /**
* 扩展信息 * 扩展信息
*/ */
private String extra; private String extra;
/** /**
* 日志时间 * 日志时间
*/ */
private Date logTime; private Date logTime;
public ErrorLogEntity(){} public ErrorLogEntity(){}
/** /**
* 获取 追踪Id * 获取 追踪Id
* @return String * @return String
*/ */
public String getTraceID(){ public String getTraceID(){
return traceID; return traceID;
} }
/** /**
* 设置 追踪Id * 设置 追踪Id
* @param traceID * @param traceID
*/ */
public void setTraceID(String traceID){ public void setTraceID(String traceID){
this.traceID = traceID; this.traceID = traceID;
} }
/** /**
* 获取 应用名称,宿主客户端运行唯一标识。 * 获取 应用名称,宿主客户端运行唯一标识。
* @return String * @return String
*/ */
public String getAppName(){ public String getAppName(){
return appName; return appName;
} }
/** /**
* 设置 应用名称,宿主客户端运行唯一标识。 * 设置 应用名称,宿主客户端运行唯一标识。
* @param appName * @param appName
*/ */
public void setAppName(String appName){ public void setAppName(String appName){
this.appName = appName; this.appName = appName;
} }
/** /**
* 获取 主机名 * 获取 主机名
* @return String * @return String
*/ */
public String getHostName(){ public String getHostName(){
return hostName; return hostName;
} }
/** /**
* 设置 主机名 * 设置 主机名
* @param hostName * @param hostName
*/ */
public void setHostName(String hostName){ public void setHostName(String hostName){
this.hostName = hostName; this.hostName = hostName;
} }
/** /**
* 获取 消息标识,如用户登录异常。 * 获取 消息标识,如用户登录异常。
* @return String * @return String
*/ */
public String getMessage(){ public String getMessage(){
return message; return message;
} }
/** /**
* 设置 消息标识,如用户登录异常。 * 设置 消息标识,如用户登录异常。
* @param message * @param message
*/ */
public void setMessage(String message){ public void setMessage(String message){
this.message = message; this.message = message;
} }
/** /**
* 获取 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 获取 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
* @return String * @return String
*/ */
public String getPlatform(){ public String getPlatform(){
return platform; return platform;
} }
/** /**
* 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
* @param platform * @param platform
*/ */
public void setPlatform(String platform){ public void setPlatform(String platform){
this.platform = platform; this.platform = platform;
} }
/** /**
* 获取 主要导致异常函数或方法调用名称 * 获取 主要导致异常函数或方法调用名称及入参
* @return String * @return String
*/ */
public String getCulprit(){ public String getCulprit(){
return culprit; return culprit;
} }
/** /**
* 设置 主要导致异常函数或方法调用名称 * 设置 主要导致异常函数或方法调用名称及入参
* @param culprit * @param culprit
*/ */
public void setCulprit(String culprit){ public void setCulprit(String culprit){
this.culprit = culprit; this.culprit = culprit;
} }
/** /**
* 获取 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 获取 异常事件标记,多个逗号分隔。用以归集异常事件种类。
* @return String * @return String
*/ */
public String getTags(){ public String getTags(){
return tags; return tags;
} }
/** /**
* 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。
* @param tags * @param tags
*/ */
public void setTags(String tags){ public void setTags(String tags){
this.tags = tags; this.tags = tags;
} }
/** /**
* 获取 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 获取 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
* @return String * @return String
*/ */
public String getLevel(){ public String getLevel(){
return level; return level;
} }
/** /**
* 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
* @param level * @param level
*/ */
public void setLevel(String level){ public void setLevel(String level){
this.level = level; this.level = level;
} }
/** /**
* 获取 客户端运行环境变量信息 * 获取 客户端运行环境变量信息
* @return String * @return String
*/ */
public String getEnvironment(){ public String getEnvironment(){
return environment; return environment;
} }
/** /**
* 设置 客户端运行环境变量信息 * 设置 客户端运行环境变量信息
* @param environment * @param environment
*/ */
public void setEnvironment(String environment){ public void setEnvironment(String environment){
this.environment = environment; this.environment = environment;
} }
/** /**
* 获取 客户端运行版本信息 * 获取 客户端运行版本信息
* @return String * @return String
*/ */
public String getReleaseVersion(){ public String getReleaseVersion(){
return releaseVersion; return releaseVersion;
} }
/** /**
* 设置 客户端运行版本信息 * 设置 客户端运行版本信息
* @param releaseVersion * @param releaseVersion
*/ */
public void setReleaseVersion(String releaseVersion){ public void setReleaseVersion(String releaseVersion){
this.releaseVersion = releaseVersion; this.releaseVersion = releaseVersion;
} }
/** /**
* 获取 指纹标识,对于相同异常事件归集数量使用。 * 获取 指纹标识,对于相同异常事件归集数量使用。
* @return String * @return String
*/ */
public String getFingerprint(){ public String getFingerprint(){
return fingerprint; return fingerprint;
} }
/** /**
* 设置 指纹标识,对于相同异常事件归集数量使用。 * 设置 指纹标识,对于相同异常事件归集数量使用。
* @param fingerprint * @param fingerprint
*/ */
public void setFingerprint(String fingerprint){ public void setFingerprint(String fingerprint){
this.fingerprint = fingerprint; this.fingerprint = fingerprint;
} }
/** /**
* 获取 线程号 * 获取 线程号
* @return String * @return String
*/ */
public String getThreadNo(){ public String getThreadNo(){
return threadNo; return threadNo;
} }
/** /**
* 设置 线程号 * 设置 线程号
* @param threadNo * @param threadNo
*/ */
public void setThreadNo(String threadNo){ public void setThreadNo(String threadNo){
this.threadNo = threadNo; this.threadNo = threadNo;
} }
/** /**
* 获取 针对同一个异常事件,数量加1 * 获取 针对同一个异常事件,数量加1
* @return Integer * @return Integer
*/ */
public Integer getCheckNum(){ public Integer getCheckNum(){
return checkNum; return checkNum;
} }
/** /**
* 设置 针对同一个异常事件,数量加1 * 设置 针对同一个异常事件,数量加1
* @param checkNum * @param checkNum
*/ */
public void setCheckNum(Integer checkNum){ public void setCheckNum(Integer checkNum){
this.checkNum = checkNum; this.checkNum = checkNum;
} }
/** /**
* 获取 异常堆栈信息 * 获取 异常堆栈信息
* @return String * @return String
*/ */
public String getErrorStack(){ public String getErrorStack(){
return errorStack; return errorStack;
} }
/** /**
* 设置 异常堆栈信息 * 设置 异常堆栈信息
* @param errorStack * @param errorStack
*/ */
public void setErrorStack(String errorStack){ public void setErrorStack(String errorStack){
this.errorStack = errorStack; this.errorStack = errorStack;
} }
/** /**
* 获取 上下文信息,如js中发送异常事件,定位源码中信息。 * 获取 上下文信息,如js中发送异常事件,定位源码中信息。
* @return String * @return String
*/ */
public String getContext(){ public String getContext(){
return context; return context;
} }
/** /**
* 设置 上下文信息,如js中发送异常事件,定位源码中信息。 * 设置 上下文信息,如js中发送异常事件,定位源码中信息。
* @param context * @param context
*/ */
public void setContext(String context){ public void setContext(String context){
this.context = context; this.context = context;
} }
/** /**
* 获取 扩展信息 * 获取 扩展信息
* @return String * @return String
*/ */
public String getExtra(){ public String getExtra(){
return extra; return extra;
} }
/** /**
* 设置 扩展信息 * 设置 扩展信息
* @param extra * @param extra
*/ */
public void setExtra(String extra){ public void setExtra(String extra){
this.extra = extra; this.extra = extra;
} }
/** /**
* 获取 日志时间 * 获取 日志时间
* @return Date * @return Date
*/ */
public Date getLogTime(){ public Date getLogTime(){
return logTime; return logTime;
} }
/** /**
* 设置 日志时间 * 设置 日志时间
* @param logTime * @param logTime
*/ */
public void setLogTime(Date logTime){ public void setLogTime(Date logTime){
this.logTime = logTime; this.logTime = logTime;
} }
...@@ -333,7 +333,7 @@ public class ErrorLogEntity extends ErrorLogVo { ...@@ -333,7 +333,7 @@ public class ErrorLogEntity extends ErrorLogVo {
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
...@@ -341,7 +341,7 @@ public class ErrorLogEntity extends ErrorLogVo { ...@@ -341,7 +341,7 @@ public class ErrorLogEntity extends ErrorLogVo {
if (obj instanceof ErrorLogEntity) { if (obj instanceof ErrorLogEntity) {
ErrorLogEntity tmp = (ErrorLogEntity) obj; ErrorLogEntity tmp = (ErrorLogEntity) obj;
if (this.getId() == tmp.getId()) { if (this.getId() == tmp.getId()) {
return true; return true;
} }
} }
return false; return false;
...@@ -371,38 +371,38 @@ public class ErrorLogEntity extends ErrorLogVo { ...@@ -371,38 +371,38 @@ public class ErrorLogEntity extends ErrorLogVo {
public void initAttrValue(){ public void initAttrValue(){
this.traceID = ""; this.traceID = "";
this.appName = ""; this.appName = "";
this.hostName = ""; this.hostName = "";
this.message = ""; this.message = "";
this.platform = "java"; this.platform = "java";
this.culprit = ""; this.culprit = "";
this.tags = ""; this.tags = "";
this.level = ""; this.level = "";
this.environment = ""; this.environment = "";
this.releaseVersion = ""; this.releaseVersion = "";
this.fingerprint = ""; this.fingerprint = "";
this.threadNo = ""; this.threadNo = "";
this.checkNum = null; this.checkNum = 1;
this.errorStack = ""; this.errorStack = "";
this.context = ""; this.context = "";
this.extra = ""; this.extra = "";
this.logTime = null; this.logTime = new Date();
} }
} }
\ No newline at end of file
...@@ -4,11 +4,11 @@ import java.util.Date; ...@@ -4,11 +4,11 @@ import java.util.Date;
import java.util.List; import java.util.List;
import com.mortals.xhx.module.error.model.ErrorLogEntity; import com.mortals.xhx.module.error.model.ErrorLogEntity;
/** /**
* 异常日志查询对象 * 异常日志查询对象
* *
* @author zxfei * @author zxfei
* @date 2022-08-24 * @date 2022-08-24
*/ */
public class ErrorLogQuery extends ErrorLogEntity { public class ErrorLogQuery extends ErrorLogEntity {
/** 开始 主键ID */ /** 开始 主键ID */
private Long idStart; private Long idStart;
...@@ -37,7 +37,7 @@ public class ErrorLogQuery extends ErrorLogEntity { ...@@ -37,7 +37,7 @@ public class ErrorLogQuery extends ErrorLogEntity {
/** 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) */ /** 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) */
private List<String> platformList; private List<String> platformList;
/** 主要导致异常函数或方法调用名称 */ /** 主要导致异常函数或方法调用名称及入参 */
private List<String> culpritList; private List<String> culpritList;
/** 异常事件标记,多个逗号分隔。用以归集异常事件种类。 */ /** 异常事件标记,多个逗号分隔。用以归集异常事件种类。 */
...@@ -103,6 +103,12 @@ public class ErrorLogQuery extends ErrorLogEntity { ...@@ -103,6 +103,12 @@ public class ErrorLogQuery extends ErrorLogEntity {
/** 结束 创建时间 */ /** 结束 创建时间 */
private String createTimeEnd; private String createTimeEnd;
/** 开始 更新时间 */
private String updateTimeStart;
/** 结束 更新时间 */
private String updateTimeEnd;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */ /** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<ErrorLogQuery> orConditionList; private List<ErrorLogQuery> orConditionList;
...@@ -112,936 +118,969 @@ public class ErrorLogQuery extends ErrorLogEntity { ...@@ -112,936 +118,969 @@ public class ErrorLogQuery extends ErrorLogEntity {
public ErrorLogQuery(){} public ErrorLogQuery(){}
/** /**
* 获取 开始 主键ID * 获取 开始 主键ID
* @return idStart * @return idStart
*/ */
public Long getIdStart(){ public Long getIdStart(){
return this.idStart; return this.idStart;
} }
/** /**
* 设置 开始 主键ID * 设置 开始 主键ID
* @param idStart * @param idStart
*/ */
public void setIdStart(Long idStart){ public void setIdStart(Long idStart){
this.idStart = idStart; this.idStart = idStart;
} }
/** /**
* 获取 结束 主键ID * 获取 结束 主键ID
* @return $idEnd * @return $idEnd
*/ */
public Long getIdEnd(){ public Long getIdEnd(){
return this.idEnd; return this.idEnd;
} }
/** /**
* 设置 结束 主键ID * 设置 结束 主键ID
* @param idEnd * @param idEnd
*/ */
public void setIdEnd(Long idEnd){ public void setIdEnd(Long idEnd){
this.idEnd = idEnd; this.idEnd = idEnd;
} }
/** /**
* 获取 增加 主键ID * 获取 增加 主键ID
* @return idIncrement * @return idIncrement
*/ */
public Long getIdIncrement(){ public Long getIdIncrement(){
return this.idIncrement; return this.idIncrement;
} }
/** /**
* 设置 增加 主键ID * 设置 增加 主键ID
* @param idIncrement * @param idIncrement
*/ */
public void setIdIncrement(Long idIncrement){ public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement; this.idIncrement = idIncrement;
} }
/** /**
* 获取 主键ID * 获取 主键ID
* @return idList * @return idList
*/ */
public List<Long> getIdList(){ public List<Long> getIdList(){
return this.idList; return this.idList;
} }
/** /**
* 设置 主键ID * 设置 主键ID
* @param idList * @param idList
*/ */
public void setIdList(List<Long> idList){ public void setIdList(List<Long> idList){
this.idList = idList; this.idList = idList;
} }
/** /**
* 获取 追踪Id * 获取 追踪Id
* @return traceIDList * @return traceIDList
*/ */
public List<String> getTraceIDList(){ public List<String> getTraceIDList(){
return this.traceIDList; return this.traceIDList;
} }
/** /**
* 设置 追踪Id * 设置 追踪Id
* @param traceIDList * @param traceIDList
*/ */
public void setTraceIDList(List<String> traceIDList){ public void setTraceIDList(List<String> traceIDList){
this.traceIDList = traceIDList; this.traceIDList = traceIDList;
} }
/** /**
* 获取 应用名称,宿主客户端运行唯一标识。 * 获取 应用名称,宿主客户端运行唯一标识。
* @return appNameList * @return appNameList
*/ */
public List<String> getAppNameList(){ public List<String> getAppNameList(){
return this.appNameList; return this.appNameList;
} }
/** /**
* 设置 应用名称,宿主客户端运行唯一标识。 * 设置 应用名称,宿主客户端运行唯一标识。
* @param appNameList * @param appNameList
*/ */
public void setAppNameList(List<String> appNameList){ public void setAppNameList(List<String> appNameList){
this.appNameList = appNameList; this.appNameList = appNameList;
} }
/** /**
* 获取 主机名 * 获取 主机名
* @return hostNameList * @return hostNameList
*/ */
public List<String> getHostNameList(){ public List<String> getHostNameList(){
return this.hostNameList; return this.hostNameList;
} }
/** /**
* 设置 主机名 * 设置 主机名
* @param hostNameList * @param hostNameList
*/ */
public void setHostNameList(List<String> hostNameList){ public void setHostNameList(List<String> hostNameList){
this.hostNameList = hostNameList; this.hostNameList = hostNameList;
} }
/** /**
* 获取 消息标识,如用户登录异常。 * 获取 消息标识,如用户登录异常。
* @return messageList * @return messageList
*/ */
public List<String> getMessageList(){ public List<String> getMessageList(){
return this.messageList; return this.messageList;
} }
/** /**
* 设置 消息标识,如用户登录异常。 * 设置 消息标识,如用户登录异常。
* @param messageList * @param messageList
*/ */
public void setMessageList(List<String> messageList){ public void setMessageList(List<String> messageList){
this.messageList = messageList; this.messageList = messageList;
} }
/** /**
* 获取 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 获取 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
* @return platformList * @return platformList
*/ */
public List<String> getPlatformList(){ public List<String> getPlatformList(){
return this.platformList; return this.platformList;
} }
/** /**
* 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
* @param platformList * @param platformList
*/ */
public void setPlatformList(List<String> platformList){ public void setPlatformList(List<String> platformList){
this.platformList = platformList; this.platformList = platformList;
} }
/** /**
* 获取 主要导致异常函数或方法调用名称 * 获取 主要导致异常函数或方法调用名称及入参
* @return culpritList * @return culpritList
*/ */
public List<String> getCulpritList(){ public List<String> getCulpritList(){
return this.culpritList; return this.culpritList;
} }
/** /**
* 设置 主要导致异常函数或方法调用名称 * 设置 主要导致异常函数或方法调用名称及入参
* @param culpritList * @param culpritList
*/ */
public void setCulpritList(List<String> culpritList){ public void setCulpritList(List<String> culpritList){
this.culpritList = culpritList; this.culpritList = culpritList;
} }
/** /**
* 获取 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 获取 异常事件标记,多个逗号分隔。用以归集异常事件种类。
* @return tagsList * @return tagsList
*/ */
public List<String> getTagsList(){ public List<String> getTagsList(){
return this.tagsList; return this.tagsList;
} }
/** /**
* 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。
* @param tagsList * @param tagsList
*/ */
public void setTagsList(List<String> tagsList){ public void setTagsList(List<String> tagsList){
this.tagsList = tagsList; this.tagsList = tagsList;
} }
/** /**
* 获取 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 获取 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
* @return levelList * @return levelList
*/ */
public List<String> getLevelList(){ public List<String> getLevelList(){
return this.levelList; return this.levelList;
} }
/** /**
* 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
* @param levelList * @param levelList
*/ */
public void setLevelList(List<String> levelList){ public void setLevelList(List<String> levelList){
this.levelList = levelList; this.levelList = levelList;
} }
/** /**
* 获取 客户端运行环境变量信息 * 获取 客户端运行环境变量信息
* @return environmentList * @return environmentList
*/ */
public List<String> getEnvironmentList(){ public List<String> getEnvironmentList(){
return this.environmentList; return this.environmentList;
} }
/** /**
* 设置 客户端运行环境变量信息 * 设置 客户端运行环境变量信息
* @param environmentList * @param environmentList
*/ */
public void setEnvironmentList(List<String> environmentList){ public void setEnvironmentList(List<String> environmentList){
this.environmentList = environmentList; this.environmentList = environmentList;
} }
/** /**
* 获取 客户端运行版本信息 * 获取 客户端运行版本信息
* @return releaseVersionList * @return releaseVersionList
*/ */
public List<String> getReleaseVersionList(){ public List<String> getReleaseVersionList(){
return this.releaseVersionList; return this.releaseVersionList;
} }
/** /**
* 设置 客户端运行版本信息 * 设置 客户端运行版本信息
* @param releaseVersionList * @param releaseVersionList
*/ */
public void setReleaseVersionList(List<String> releaseVersionList){ public void setReleaseVersionList(List<String> releaseVersionList){
this.releaseVersionList = releaseVersionList; this.releaseVersionList = releaseVersionList;
} }
/** /**
* 获取 指纹标识,对于相同异常事件归集数量使用。 * 获取 指纹标识,对于相同异常事件归集数量使用。
* @return fingerprintList * @return fingerprintList
*/ */
public List<String> getFingerprintList(){ public List<String> getFingerprintList(){
return this.fingerprintList; return this.fingerprintList;
} }
/** /**
* 设置 指纹标识,对于相同异常事件归集数量使用。 * 设置 指纹标识,对于相同异常事件归集数量使用。
* @param fingerprintList * @param fingerprintList
*/ */
public void setFingerprintList(List<String> fingerprintList){ public void setFingerprintList(List<String> fingerprintList){
this.fingerprintList = fingerprintList; this.fingerprintList = fingerprintList;
} }
/** /**
* 获取 线程号 * 获取 线程号
* @return threadNoList * @return threadNoList
*/ */
public List<String> getThreadNoList(){ public List<String> getThreadNoList(){
return this.threadNoList; return this.threadNoList;
} }
/** /**
* 设置 线程号 * 设置 线程号
* @param threadNoList * @param threadNoList
*/ */
public void setThreadNoList(List<String> threadNoList){ public void setThreadNoList(List<String> threadNoList){
this.threadNoList = threadNoList; this.threadNoList = threadNoList;
} }
/** /**
* 获取 开始 针对同一个异常事件,数量加1 * 获取 开始 针对同一个异常事件,数量加1
* @return checkNumStart * @return checkNumStart
*/ */
public Integer getCheckNumStart(){ public Integer getCheckNumStart(){
return this.checkNumStart; return this.checkNumStart;
} }
/** /**
* 设置 开始 针对同一个异常事件,数量加1 * 设置 开始 针对同一个异常事件,数量加1
* @param checkNumStart * @param checkNumStart
*/ */
public void setCheckNumStart(Integer checkNumStart){ public void setCheckNumStart(Integer checkNumStart){
this.checkNumStart = checkNumStart; this.checkNumStart = checkNumStart;
} }
/** /**
* 获取 结束 针对同一个异常事件,数量加1 * 获取 结束 针对同一个异常事件,数量加1
* @return $checkNumEnd * @return $checkNumEnd
*/ */
public Integer getCheckNumEnd(){ public Integer getCheckNumEnd(){
return this.checkNumEnd; return this.checkNumEnd;
} }
/** /**
* 设置 结束 针对同一个异常事件,数量加1 * 设置 结束 针对同一个异常事件,数量加1
* @param checkNumEnd * @param checkNumEnd
*/ */
public void setCheckNumEnd(Integer checkNumEnd){ public void setCheckNumEnd(Integer checkNumEnd){
this.checkNumEnd = checkNumEnd; this.checkNumEnd = checkNumEnd;
} }
/** /**
* 获取 增加 针对同一个异常事件,数量加1 * 获取 增加 针对同一个异常事件,数量加1
* @return checkNumIncrement * @return checkNumIncrement
*/ */
public Integer getCheckNumIncrement(){ public Integer getCheckNumIncrement(){
return this.checkNumIncrement; return this.checkNumIncrement;
} }
/** /**
* 设置 增加 针对同一个异常事件,数量加1 * 设置 增加 针对同一个异常事件,数量加1
* @param checkNumIncrement * @param checkNumIncrement
*/ */
public void setCheckNumIncrement(Integer checkNumIncrement){ public void setCheckNumIncrement(Integer checkNumIncrement){
this.checkNumIncrement = checkNumIncrement; this.checkNumIncrement = checkNumIncrement;
} }
/** /**
* 获取 针对同一个异常事件,数量加1 * 获取 针对同一个异常事件,数量加1
* @return checkNumList * @return checkNumList
*/ */
public List<Integer> getCheckNumList(){ public List<Integer> getCheckNumList(){
return this.checkNumList; return this.checkNumList;
} }
/** /**
* 设置 针对同一个异常事件,数量加1 * 设置 针对同一个异常事件,数量加1
* @param checkNumList * @param checkNumList
*/ */
public void setCheckNumList(List<Integer> checkNumList){ public void setCheckNumList(List<Integer> checkNumList){
this.checkNumList = checkNumList; this.checkNumList = checkNumList;
} }
/** /**
* 获取 异常堆栈信息 * 获取 异常堆栈信息
* @return errorStackList * @return errorStackList
*/ */
public List<String> getErrorStackList(){ public List<String> getErrorStackList(){
return this.errorStackList; return this.errorStackList;
} }
/** /**
* 设置 异常堆栈信息 * 设置 异常堆栈信息
* @param errorStackList * @param errorStackList
*/ */
public void setErrorStackList(List<String> errorStackList){ public void setErrorStackList(List<String> errorStackList){
this.errorStackList = errorStackList; this.errorStackList = errorStackList;
} }
/** /**
* 获取 上下文信息,如js中发送异常事件,定位源码中信息。 * 获取 上下文信息,如js中发送异常事件,定位源码中信息。
* @return contextList * @return contextList
*/ */
public List<String> getContextList(){ public List<String> getContextList(){
return this.contextList; return this.contextList;
} }
/** /**
* 设置 上下文信息,如js中发送异常事件,定位源码中信息。 * 设置 上下文信息,如js中发送异常事件,定位源码中信息。
* @param contextList * @param contextList
*/ */
public void setContextList(List<String> contextList){ public void setContextList(List<String> contextList){
this.contextList = contextList; this.contextList = contextList;
} }
/** /**
* 获取 扩展信息 * 获取 扩展信息
* @return extraList * @return extraList
*/ */
public List<String> getExtraList(){ public List<String> getExtraList(){
return this.extraList; return this.extraList;
} }
/** /**
* 设置 扩展信息 * 设置 扩展信息
* @param extraList * @param extraList
*/ */
public void setExtraList(List<String> extraList){ public void setExtraList(List<String> extraList){
this.extraList = extraList; this.extraList = extraList;
} }
/** /**
* 获取 开始 日志时间 * 获取 开始 日志时间
* @return logTimeStart * @return logTimeStart
*/ */
public String getLogTimeStart(){ public String getLogTimeStart(){
return this.logTimeStart; return this.logTimeStart;
} }
/** /**
* 设置 开始 日志时间 * 设置 开始 日志时间
* @param logTimeStart * @param logTimeStart
*/ */
public void setLogTimeStart(String logTimeStart){ public void setLogTimeStart(String logTimeStart){
this.logTimeStart = logTimeStart; this.logTimeStart = logTimeStart;
} }
/** /**
* 获取 结束 日志时间 * 获取 结束 日志时间
* @return logTimeEnd * @return logTimeEnd
*/ */
public String getLogTimeEnd(){ public String getLogTimeEnd(){
return this.logTimeEnd; return this.logTimeEnd;
} }
/** /**
* 设置 结束 日志时间 * 设置 结束 日志时间
* @param logTimeEnd * @param logTimeEnd
*/ */
public void setLogTimeEnd(String logTimeEnd){ public void setLogTimeEnd(String logTimeEnd){
this.logTimeEnd = logTimeEnd; this.logTimeEnd = logTimeEnd;
} }
/** /**
* 获取 开始 创建用户 * 获取 开始 创建用户
* @return createUserIdStart * @return createUserIdStart
*/ */
public Long getCreateUserIdStart(){ public Long getCreateUserIdStart(){
return this.createUserIdStart; return this.createUserIdStart;
} }
/** /**
* 设置 开始 创建用户 * 设置 开始 创建用户
* @param createUserIdStart * @param createUserIdStart
*/ */
public void setCreateUserIdStart(Long createUserIdStart){ public void setCreateUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart; this.createUserIdStart = createUserIdStart;
} }
/** /**
* 获取 结束 创建用户 * 获取 结束 创建用户
* @return $createUserIdEnd * @return $createUserIdEnd
*/ */
public Long getCreateUserIdEnd(){ public Long getCreateUserIdEnd(){
return this.createUserIdEnd; return this.createUserIdEnd;
} }
/** /**
* 设置 结束 创建用户 * 设置 结束 创建用户
* @param createUserIdEnd * @param createUserIdEnd
*/ */
public void setCreateUserIdEnd(Long createUserIdEnd){ public void setCreateUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd; this.createUserIdEnd = createUserIdEnd;
} }
/** /**
* 获取 增加 创建用户 * 获取 增加 创建用户
* @return createUserIdIncrement * @return createUserIdIncrement
*/ */
public Long getCreateUserIdIncrement(){ public Long getCreateUserIdIncrement(){
return this.createUserIdIncrement; return this.createUserIdIncrement;
} }
/** /**
* 设置 增加 创建用户 * 设置 增加 创建用户
* @param createUserIdIncrement * @param createUserIdIncrement
*/ */
public void setCreateUserIdIncrement(Long createUserIdIncrement){ public void setCreateUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement; this.createUserIdIncrement = createUserIdIncrement;
} }
/** /**
* 获取 创建用户 * 获取 创建用户
* @return createUserIdList * @return createUserIdList
*/ */
public List<Long> getCreateUserIdList(){ public List<Long> getCreateUserIdList(){
return this.createUserIdList; return this.createUserIdList;
} }
/** /**
* 设置 创建用户 * 设置 创建用户
* @param createUserIdList * @param createUserIdList
*/ */
public void setCreateUserIdList(List<Long> createUserIdList){ public void setCreateUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList; this.createUserIdList = createUserIdList;
} }
/** /**
* 获取 开始 创建时间 * 获取 开始 创建时间
* @return createTimeStart * @return createTimeStart
*/ */
public String getCreateTimeStart(){ public String getCreateTimeStart(){
return this.createTimeStart; return this.createTimeStart;
} }
/** /**
* 设置 开始 创建时间 * 设置 开始 创建时间
* @param createTimeStart * @param createTimeStart
*/ */
public void setCreateTimeStart(String createTimeStart){ public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart; this.createTimeStart = createTimeStart;
} }
/** /**
* 获取 结束 创建时间 * 获取 结束 创建时间
* @return createTimeEnd * @return createTimeEnd
*/ */
public String getCreateTimeEnd(){ public String getCreateTimeEnd(){
return this.createTimeEnd; return this.createTimeEnd;
} }
/** /**
* 设置 结束 创建时间 * 设置 结束 创建时间
* @param createTimeEnd * @param createTimeEnd
*/ */
public void setCreateTimeEnd(String createTimeEnd){ public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd; this.createTimeEnd = createTimeEnd;
} }
/** /**
* 设置 主键ID * 获取 开始 更新时间
* @param id * @return updateTimeStart
*/ */
public String getUpdateTimeStart(){
return this.updateTimeStart;
}
/**
* 设置 开始 更新时间
* @param updateTimeStart
*/
public void setUpdateTimeStart(String updateTimeStart){
this.updateTimeStart = updateTimeStart;
}
/**
* 获取 结束 更新时间
* @return updateTimeEnd
*/
public String getUpdateTimeEnd(){
return this.updateTimeEnd;
}
/**
* 设置 结束 更新时间
* @param updateTimeEnd
*/
public void setUpdateTimeEnd(String updateTimeEnd){
this.updateTimeEnd = updateTimeEnd;
}
/**
* 设置 主键ID
* @param id
*/
public ErrorLogQuery id(Long id){ public ErrorLogQuery id(Long id){
setId(id); setId(id);
return this; return this;
} }
/** /**
* 设置 开始 主键ID * 设置 开始 主键ID
* @param idStart * @param idStart
*/ */
public ErrorLogQuery idStart(Long idStart){ public ErrorLogQuery idStart(Long idStart){
this.idStart = idStart; this.idStart = idStart;
return this; return this;
} }
/** /**
* 设置 结束 主键ID * 设置 结束 主键ID
* @param idEnd * @param idEnd
*/ */
public ErrorLogQuery idEnd(Long idEnd){ public ErrorLogQuery idEnd(Long idEnd){
this.idEnd = idEnd; this.idEnd = idEnd;
return this; return this;
} }
/** /**
* 设置 增加 主键ID * 设置 增加 主键ID
* @param idIncrement * @param idIncrement
*/ */
public ErrorLogQuery idIncrement(Long idIncrement){ public ErrorLogQuery idIncrement(Long idIncrement){
this.idIncrement = idIncrement; this.idIncrement = idIncrement;
return this; return this;
} }
/** /**
* 设置 主键ID * 设置 主键ID
* @param idList * @param idList
*/ */
public ErrorLogQuery idList(List<Long> idList){ public ErrorLogQuery idList(List<Long> idList){
this.idList = idList; this.idList = idList;
return this; return this;
} }
/** /**
* 设置 追踪Id * 设置 追踪Id
* @param traceID * @param traceID
*/ */
public ErrorLogQuery traceID(String traceID){ public ErrorLogQuery traceID(String traceID){
setTraceID(traceID); setTraceID(traceID);
return this; return this;
} }
/** /**
* 设置 追踪Id * 设置 追踪Id
* @param traceIDList * @param traceIDList
*/ */
public ErrorLogQuery traceIDList(List<String> traceIDList){ public ErrorLogQuery traceIDList(List<String> traceIDList){
this.traceIDList = traceIDList; this.traceIDList = traceIDList;
return this; return this;
} }
/** /**
* 设置 应用名称,宿主客户端运行唯一标识。 * 设置 应用名称,宿主客户端运行唯一标识。
* @param appName * @param appName
*/ */
public ErrorLogQuery appName(String appName){ public ErrorLogQuery appName(String appName){
setAppName(appName); setAppName(appName);
return this; return this;
} }
/** /**
* 设置 应用名称,宿主客户端运行唯一标识。 * 设置 应用名称,宿主客户端运行唯一标识。
* @param appNameList * @param appNameList
*/ */
public ErrorLogQuery appNameList(List<String> appNameList){ public ErrorLogQuery appNameList(List<String> appNameList){
this.appNameList = appNameList; this.appNameList = appNameList;
return this; return this;
} }
/** /**
* 设置 主机名 * 设置 主机名
* @param hostName * @param hostName
*/ */
public ErrorLogQuery hostName(String hostName){ public ErrorLogQuery hostName(String hostName){
setHostName(hostName); setHostName(hostName);
return this; return this;
} }
/** /**
* 设置 主机名 * 设置 主机名
* @param hostNameList * @param hostNameList
*/ */
public ErrorLogQuery hostNameList(List<String> hostNameList){ public ErrorLogQuery hostNameList(List<String> hostNameList){
this.hostNameList = hostNameList; this.hostNameList = hostNameList;
return this; return this;
} }
/** /**
* 设置 消息标识,如用户登录异常。 * 设置 消息标识,如用户登录异常。
* @param message * @param message
*/ */
public ErrorLogQuery message(String message){ public ErrorLogQuery message(String message){
setMessage(message); setMessage(message);
return this; return this;
} }
/** /**
* 设置 消息标识,如用户登录异常。 * 设置 消息标识,如用户登录异常。
* @param messageList * @param messageList
*/ */
public ErrorLogQuery messageList(List<String> messageList){ public ErrorLogQuery messageList(List<String> messageList){
this.messageList = messageList; this.messageList = messageList;
return this; return this;
} }
/** /**
* 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
* @param platform * @param platform
*/ */
public ErrorLogQuery platform(String platform){ public ErrorLogQuery platform(String platform){
setPlatform(platform); setPlatform(platform);
return this; return this;
} }
/** /**
* 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python) * 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
* @param platformList * @param platformList
*/ */
public ErrorLogQuery platformList(List<String> platformList){ public ErrorLogQuery platformList(List<String> platformList){
this.platformList = platformList; this.platformList = platformList;
return this; return this;
} }
/** /**
* 设置 主要导致异常函数或方法调用名称 * 设置 主要导致异常函数或方法调用名称及入参
* @param culprit * @param culprit
*/ */
public ErrorLogQuery culprit(String culprit){ public ErrorLogQuery culprit(String culprit){
setCulprit(culprit); setCulprit(culprit);
return this; return this;
} }
/** /**
* 设置 主要导致异常函数或方法调用名称 * 设置 主要导致异常函数或方法调用名称及入参
* @param culpritList * @param culpritList
*/ */
public ErrorLogQuery culpritList(List<String> culpritList){ public ErrorLogQuery culpritList(List<String> culpritList){
this.culpritList = culpritList; this.culpritList = culpritList;
return this; return this;
} }
/** /**
* 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。
* @param tags * @param tags
*/ */
public ErrorLogQuery tags(String tags){ public ErrorLogQuery tags(String tags){
setTags(tags); setTags(tags);
return this; return this;
} }
/** /**
* 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。 * 设置 异常事件标记,多个逗号分隔。用以归集异常事件种类。
* @param tagsList * @param tagsList
*/ */
public ErrorLogQuery tagsList(List<String> tagsList){ public ErrorLogQuery tagsList(List<String> tagsList){
this.tagsList = tagsList; this.tagsList = tagsList;
return this; return this;
} }
/** /**
* 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
* @param level * @param level
*/ */
public ErrorLogQuery level(String level){ public ErrorLogQuery level(String level){
setLevel(level); setLevel(level);
return this; return this;
} }
/** /**
* 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG) * 设置 等级(FATAL,ERROR,WARNING,INFO,DEBUG)
* @param levelList * @param levelList
*/ */
public ErrorLogQuery levelList(List<String> levelList){ public ErrorLogQuery levelList(List<String> levelList){
this.levelList = levelList; this.levelList = levelList;
return this; return this;
} }
/** /**
* 设置 客户端运行环境变量信息 * 设置 客户端运行环境变量信息
* @param environment * @param environment
*/ */
public ErrorLogQuery environment(String environment){ public ErrorLogQuery environment(String environment){
setEnvironment(environment); setEnvironment(environment);
return this; return this;
} }
/** /**
* 设置 客户端运行环境变量信息 * 设置 客户端运行环境变量信息
* @param environmentList * @param environmentList
*/ */
public ErrorLogQuery environmentList(List<String> environmentList){ public ErrorLogQuery environmentList(List<String> environmentList){
this.environmentList = environmentList; this.environmentList = environmentList;
return this; return this;
} }
/** /**
* 设置 客户端运行版本信息 * 设置 客户端运行版本信息
* @param releaseVersion * @param releaseVersion
*/ */
public ErrorLogQuery releaseVersion(String releaseVersion){ public ErrorLogQuery releaseVersion(String releaseVersion){
setReleaseVersion(releaseVersion); setReleaseVersion(releaseVersion);
return this; return this;
} }
/** /**
* 设置 客户端运行版本信息 * 设置 客户端运行版本信息
* @param releaseVersionList * @param releaseVersionList
*/ */
public ErrorLogQuery releaseVersionList(List<String> releaseVersionList){ public ErrorLogQuery releaseVersionList(List<String> releaseVersionList){
this.releaseVersionList = releaseVersionList; this.releaseVersionList = releaseVersionList;
return this; return this;
} }
/** /**
* 设置 指纹标识,对于相同异常事件归集数量使用。 * 设置 指纹标识,对于相同异常事件归集数量使用。
* @param fingerprint * @param fingerprint
*/ */
public ErrorLogQuery fingerprint(String fingerprint){ public ErrorLogQuery fingerprint(String fingerprint){
setFingerprint(fingerprint); setFingerprint(fingerprint);
return this; return this;
} }
/** /**
* 设置 指纹标识,对于相同异常事件归集数量使用。 * 设置 指纹标识,对于相同异常事件归集数量使用。
* @param fingerprintList * @param fingerprintList
*/ */
public ErrorLogQuery fingerprintList(List<String> fingerprintList){ public ErrorLogQuery fingerprintList(List<String> fingerprintList){
this.fingerprintList = fingerprintList; this.fingerprintList = fingerprintList;
return this; return this;
} }
/** /**
* 设置 线程号 * 设置 线程号
* @param threadNo * @param threadNo
*/ */
public ErrorLogQuery threadNo(String threadNo){ public ErrorLogQuery threadNo(String threadNo){
setThreadNo(threadNo); setThreadNo(threadNo);
return this; return this;
} }
/** /**
* 设置 线程号 * 设置 线程号
* @param threadNoList * @param threadNoList
*/ */
public ErrorLogQuery threadNoList(List<String> threadNoList){ public ErrorLogQuery threadNoList(List<String> threadNoList){
this.threadNoList = threadNoList; this.threadNoList = threadNoList;
return this; return this;
} }
/** /**
* 设置 针对同一个异常事件,数量加1 * 设置 针对同一个异常事件,数量加1
* @param checkNum * @param checkNum
*/ */
public ErrorLogQuery checkNum(Integer checkNum){ public ErrorLogQuery checkNum(Integer checkNum){
setCheckNum(checkNum); setCheckNum(checkNum);
return this; return this;
} }
/** /**
* 设置 开始 针对同一个异常事件,数量加1 * 设置 开始 针对同一个异常事件,数量加1
* @param checkNumStart * @param checkNumStart
*/ */
public ErrorLogQuery checkNumStart(Integer checkNumStart){ public ErrorLogQuery checkNumStart(Integer checkNumStart){
this.checkNumStart = checkNumStart; this.checkNumStart = checkNumStart;
return this; return this;
} }
/** /**
* 设置 结束 针对同一个异常事件,数量加1 * 设置 结束 针对同一个异常事件,数量加1
* @param checkNumEnd * @param checkNumEnd
*/ */
public ErrorLogQuery checkNumEnd(Integer checkNumEnd){ public ErrorLogQuery checkNumEnd(Integer checkNumEnd){
this.checkNumEnd = checkNumEnd; this.checkNumEnd = checkNumEnd;
return this; return this;
} }
/** /**
* 设置 增加 针对同一个异常事件,数量加1 * 设置 增加 针对同一个异常事件,数量加1
* @param checkNumIncrement * @param checkNumIncrement
*/ */
public ErrorLogQuery checkNumIncrement(Integer checkNumIncrement){ public ErrorLogQuery checkNumIncrement(Integer checkNumIncrement){
this.checkNumIncrement = checkNumIncrement; this.checkNumIncrement = checkNumIncrement;
return this; return this;
} }
/** /**
* 设置 针对同一个异常事件,数量加1 * 设置 针对同一个异常事件,数量加1
* @param checkNumList * @param checkNumList
*/ */
public ErrorLogQuery checkNumList(List<Integer> checkNumList){ public ErrorLogQuery checkNumList(List<Integer> checkNumList){
this.checkNumList = checkNumList; this.checkNumList = checkNumList;
return this; return this;
} }
/** /**
* 设置 异常堆栈信息 * 设置 异常堆栈信息
* @param errorStack * @param errorStack
*/ */
public ErrorLogQuery errorStack(String errorStack){ public ErrorLogQuery errorStack(String errorStack){
setErrorStack(errorStack); setErrorStack(errorStack);
return this; return this;
} }
/** /**
* 设置 异常堆栈信息 * 设置 异常堆栈信息
* @param errorStackList * @param errorStackList
*/ */
public ErrorLogQuery errorStackList(List<String> errorStackList){ public ErrorLogQuery errorStackList(List<String> errorStackList){
this.errorStackList = errorStackList; this.errorStackList = errorStackList;
return this; return this;
} }
/** /**
* 设置 上下文信息,如js中发送异常事件,定位源码中信息。 * 设置 上下文信息,如js中发送异常事件,定位源码中信息。
* @param context * @param context
*/ */
public ErrorLogQuery context(String context){ public ErrorLogQuery context(String context){
setContext(context); setContext(context);
return this; return this;
} }
/** /**
* 设置 上下文信息,如js中发送异常事件,定位源码中信息。 * 设置 上下文信息,如js中发送异常事件,定位源码中信息。
* @param contextList * @param contextList
*/ */
public ErrorLogQuery contextList(List<String> contextList){ public ErrorLogQuery contextList(List<String> contextList){
this.contextList = contextList; this.contextList = contextList;
return this; return this;
} }
/** /**
* 设置 扩展信息 * 设置 扩展信息
* @param extra * @param extra
*/ */
public ErrorLogQuery extra(String extra){ public ErrorLogQuery extra(String extra){
setExtra(extra); setExtra(extra);
return this; return this;
} }
/** /**
* 设置 扩展信息 * 设置 扩展信息
* @param extraList * @param extraList
*/ */
public ErrorLogQuery extraList(List<String> extraList){ public ErrorLogQuery extraList(List<String> extraList){
this.extraList = extraList; this.extraList = extraList;
return this; return this;
} }
/** /**
* 设置 创建用户 * 设置 创建用户
* @param createUserId * @param createUserId
*/ */
public ErrorLogQuery createUserId(Long createUserId){ public ErrorLogQuery createUserId(Long createUserId){
setCreateUserId(createUserId); setCreateUserId(createUserId);
return this; return this;
} }
/** /**
* 设置 开始 创建用户 * 设置 开始 创建用户
* @param createUserIdStart * @param createUserIdStart
*/ */
public ErrorLogQuery createUserIdStart(Long createUserIdStart){ public ErrorLogQuery createUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart; this.createUserIdStart = createUserIdStart;
return this; return this;
} }
/** /**
* 设置 结束 创建用户 * 设置 结束 创建用户
* @param createUserIdEnd * @param createUserIdEnd
*/ */
public ErrorLogQuery createUserIdEnd(Long createUserIdEnd){ public ErrorLogQuery createUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd; this.createUserIdEnd = createUserIdEnd;
return this; return this;
} }
/** /**
* 设置 增加 创建用户 * 设置 增加 创建用户
* @param createUserIdIncrement * @param createUserIdIncrement
*/ */
public ErrorLogQuery createUserIdIncrement(Long createUserIdIncrement){ public ErrorLogQuery createUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement; this.createUserIdIncrement = createUserIdIncrement;
return this; return this;
} }
/** /**
* 设置 创建用户 * 设置 创建用户
* @param createUserIdList * @param createUserIdList
*/ */
public ErrorLogQuery createUserIdList(List<Long> createUserIdList){ public ErrorLogQuery createUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList; this.createUserIdList = createUserIdList;
return this; return this;
} }
/** /**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) * 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList * @return orConditionList
*/ */
public List<ErrorLogQuery> getOrConditionList(){ public List<ErrorLogQuery> getOrConditionList(){
return this.orConditionList; return this.orConditionList;
} }
/** /**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) * 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList * @param orConditionList
*/ */
public void setOrConditionList(List<ErrorLogQuery> orConditionList){ public void setOrConditionList(List<ErrorLogQuery> orConditionList){
this.orConditionList = orConditionList; this.orConditionList = orConditionList;
} }
/** /**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) * 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList * @return andConditionList
*/ */
public List<ErrorLogQuery> getAndConditionList(){ public List<ErrorLogQuery> getAndConditionList(){
return this.andConditionList; return this.andConditionList;
} }
/** /**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) * 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList * @param andConditionList
*/ */
public void setAndConditionList(List<ErrorLogQuery> andConditionList){ public void setAndConditionList(List<ErrorLogQuery> andConditionList){
this.andConditionList = andConditionList; this.andConditionList = andConditionList;
} }
......
...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.error.service.impl; ...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.error.service.impl;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import com.mortals.xhx.module.access.model.AccessLogEntity; import com.mortals.xhx.module.access.model.AccessLogEntity;
import com.mortals.xhx.module.error.model.ErrorLogQuery;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
...@@ -10,6 +11,7 @@ import com.mortals.xhx.module.error.dao.ErrorLogDao; ...@@ -10,6 +11,7 @@ import com.mortals.xhx.module.error.dao.ErrorLogDao;
import com.mortals.xhx.module.error.model.ErrorLogEntity; import com.mortals.xhx.module.error.model.ErrorLogEntity;
import com.mortals.xhx.module.error.service.ErrorLogService; import com.mortals.xhx.module.error.service.ErrorLogService;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import org.springframework.util.ObjectUtils;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -25,8 +27,16 @@ import java.util.List; ...@@ -25,8 +27,16 @@ import java.util.List;
public class ErrorLogServiceImpl extends AbstractCRUDServiceImpl<ErrorLogDao, ErrorLogEntity, Long> implements ErrorLogService { public class ErrorLogServiceImpl extends AbstractCRUDServiceImpl<ErrorLogDao, ErrorLogEntity, Long> implements ErrorLogService {
@Override @Override
protected void saveBefore(ErrorLogEntity entity, Context context) throws AppException { protected void saveBefore(ErrorLogEntity entity, Context context) throws AppException {
//判断当前是否有重复的
//非系统自增,需这里设置主键 //非系统自增,需这里设置主键
entity.setId(IdUtil.getSnowflake(0, 1).nextId()); entity.setId(IdUtil.getSnowflake(0, 1).nextId());
super.saveBefore(entity, context); super.saveBefore(entity, context);
} }
...@@ -38,12 +48,5 @@ public class ErrorLogServiceImpl extends AbstractCRUDServiceImpl<ErrorLogDao, Er ...@@ -38,12 +48,5 @@ public class ErrorLogServiceImpl extends AbstractCRUDServiceImpl<ErrorLogDao, Er
return super.save(list, context); return super.save(list, context);
} }
@Override
public ErrorLogEntity get(Long key, Context context) throws AppException {
ErrorLogEntity errorLogEntity = new ErrorLogEntity();
Snowflake snowflake = IdUtil.getSnowflake(0, 1);
long generateDateTime = snowflake.getGenerateDateTime(key);
errorLogEntity.setCreateTime(new Date(generateDateTime));
return this.getDao().get(key,errorLogEntity);
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd"> "mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.error.dao.ibatis.ErrorLogDaoImpl"> <mapper namespace="com.mortals.xhx.module.error.dao.ibatis.ErrorLogDaoImpl">
<!-- 字段和属性映射 --> <!-- 字段和属性映射 -->
<resultMap type="ErrorLogEntity" id="ErrorLogEntity-Map"> <resultMap type="ErrorLogEntity" id="ErrorLogEntity-Map">
<id property="id" column="id" /> <id property="id" column="id" />
<result property="traceID" column="traceID" /> <result property="traceID" column="traceID" />
<result property="appName" column="appName" /> <result property="appName" column="appName" />
<result property="hostName" column="hostName" /> <result property="hostName" column="hostName" />
<result property="message" column="message" /> <result property="message" column="message" />
<result property="platform" column="platform" /> <result property="platform" column="platform" />
<result property="culprit" column="culprit" /> <result property="culprit" column="culprit" />
<result property="tags" column="tags" /> <result property="tags" column="tags" />
<result property="level" column="level" /> <result property="level" column="level" />
<result property="environment" column="environment" /> <result property="environment" column="environment" />
<result property="releaseVersion" column="releaseVersion" /> <result property="releaseVersion" column="releaseVersion" />
<result property="fingerprint" column="fingerprint" /> <result property="fingerprint" column="fingerprint" />
<result property="threadNo" column="threadNo" /> <result property="threadNo" column="threadNo" />
<result property="checkNum" column="checkNum" /> <result property="checkNum" column="checkNum" />
<result property="errorStack" column="errorStack" /> <result property="errorStack" column="errorStack" />
<result property="context" column="context" /> <result property="context" column="context" />
<result property="extra" column="extra" /> <result property="extra" column="extra" />
<result property="logTime" column="logTime" /> <result property="logTime" column="logTime" />
<result property="createUserId" column="createUserId" /> <result property="createUserId" column="createUserId" />
<result property="createTime" column="createTime" /> <result property="createTime" column="createTime" />
<result property="updateTime" column="updateTime" />
</resultMap> </resultMap>
<update id="createTable" parameterType="paramDto"> <update id="createTable" parameterType="paramDto">
CREATE TABLE `${tableName}`( CREATE TABLE `${tableName}`(
`id` bigint(20) COMMENT '主键ID', `id` bigint(20) COMMENT '主键ID',
`traceID` varchar(64) COMMENT '追踪Id', `traceID` varchar(64) COMMENT '追踪Id',
`appName` varchar(64) COMMENT '应用名称,宿主客户端运行唯一标识。', `appName` varchar(64) COMMENT '应用名称,宿主客户端运行唯一标识。',
`hostName` varchar(64) COMMENT '主机名', `hostName` varchar(64) COMMENT '主机名',
`message` varchar(256) COMMENT '消息标识,如用户登录异常。', `message` varchar(1024) COMMENT '消息标识,如用户登录异常。',
`platform` varchar(64) COMMENT '当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)', `platform` varchar(64) COMMENT '当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)',
`culprit` varchar(512) COMMENT '主要导致异常函数或方法调用名称', `culprit` varchar(2048) COMMENT '主要导致异常函数或方法调用名称及入参',
`tags` varchar(512) COMMENT '异常事件标记,多个逗号分隔。用以归集异常事件种类。', `tags` varchar(256) COMMENT '异常事件标记,多个逗号分隔。用以归集异常事件种类。',
`level` varchar(64) COMMENT '等级(FATAL,ERROR,WARNING,INFO,DEBUG)', `level` varchar(64) COMMENT '等级(FATAL,ERROR,WARNING,INFO,DEBUG)',
`environment` varchar(1024) COMMENT '客户端运行环境变量信息', `environment` varchar(1024) COMMENT '客户端运行环境变量信息',
`releaseVersion` varchar(64) COMMENT '客户端运行版本信息', `releaseVersion` varchar(64) COMMENT '客户端运行版本信息',
`fingerprint` varchar(64) COMMENT '指纹标识,对于相同异常事件归集数量使用。', `fingerprint` varchar(64) COMMENT '指纹标识,对于相同异常事件归集数量使用。',
`threadNo` varchar(64) COMMENT '线程号', `threadNo` varchar(64) COMMENT '线程号',
`checkNum` int(4) COMMENT '针对同一个异常事件,数量加1', `checkNum` int(4) COMMENT '针对同一个异常事件,数量加1',
`errorStack` text COMMENT '异常堆栈信息', `errorStack` text COMMENT '异常堆栈信息',
`context` text COMMENT '上下文信息,如js中发送异常事件,定位源码中信息。', `context` text COMMENT '上下文信息,如js中发送异常事件,定位源码中信息。',
`extra` varchar(2048) COMMENT '扩展信息', `extra` varchar(2048) COMMENT '扩展信息',
`logTime` datetime COMMENT '日志时间', `logTime` datetime COMMENT '日志时间',
`createUserId` bigint(20) COMMENT '创建用户', `createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime NOT NULL COMMENT '创建时间', `createTime` datetime NOT NULL COMMENT '创建时间',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='异常日志'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='异常日志';
</update> </update>
...@@ -57,83 +59,86 @@ ...@@ -57,83 +59,86 @@
<!-- 表所有列 --> <!-- 表所有列 -->
<sql id="_columns"> <sql id="_columns">
<trim suffixOverrides="," suffix=""> <trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id, a.id,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('traceID') or colPickMode == 1 and data.containsKey('traceID')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('traceID') or colPickMode == 1 and data.containsKey('traceID')))">
a.traceID, a.traceID,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('appName') or colPickMode == 1 and data.containsKey('appName')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('appName') or colPickMode == 1 and data.containsKey('appName')))">
a.appName, a.appName,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('hostName') or colPickMode == 1 and data.containsKey('hostName')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('hostName') or colPickMode == 1 and data.containsKey('hostName')))">
a.hostName, a.hostName,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('message') or colPickMode == 1 and data.containsKey('message')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('message') or colPickMode == 1 and data.containsKey('message')))">
a.message, a.message,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('platform') or colPickMode == 1 and data.containsKey('platform')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('platform') or colPickMode == 1 and data.containsKey('platform')))">
a.platform, a.platform,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('culprit') or colPickMode == 1 and data.containsKey('culprit')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('culprit') or colPickMode == 1 and data.containsKey('culprit')))">
a.culprit, a.culprit,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('tags') or colPickMode == 1 and data.containsKey('tags')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('tags') or colPickMode == 1 and data.containsKey('tags')))">
a.tags, a.tags,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('level') or colPickMode == 1 and data.containsKey('level')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('level') or colPickMode == 1 and data.containsKey('level')))">
a.level, a.level,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('environment') or colPickMode == 1 and data.containsKey('environment')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('environment') or colPickMode == 1 and data.containsKey('environment')))">
a.environment, a.environment,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('releaseVersion') or colPickMode == 1 and data.containsKey('releaseVersion')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('releaseVersion') or colPickMode == 1 and data.containsKey('releaseVersion')))">
a.releaseVersion, a.releaseVersion,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('fingerprint') or colPickMode == 1 and data.containsKey('fingerprint')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('fingerprint') or colPickMode == 1 and data.containsKey('fingerprint')))">
a.fingerprint, a.fingerprint,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('threadNo') or colPickMode == 1 and data.containsKey('threadNo')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('threadNo') or colPickMode == 1 and data.containsKey('threadNo')))">
a.threadNo, a.threadNo,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('checkNum') or colPickMode == 1 and data.containsKey('checkNum')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('checkNum') or colPickMode == 1 and data.containsKey('checkNum')))">
a.checkNum, a.checkNum,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('errorStack') or colPickMode == 1 and data.containsKey('errorStack')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('errorStack') or colPickMode == 1 and data.containsKey('errorStack')))">
a.errorStack, a.errorStack,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('context') or colPickMode == 1 and data.containsKey('context')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('context') or colPickMode == 1 and data.containsKey('context')))">
a.context, a.context,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('extra') or colPickMode == 1 and data.containsKey('extra')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('extra') or colPickMode == 1 and data.containsKey('extra')))">
a.extra, a.extra,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('logTime') or colPickMode == 1 and data.containsKey('logTime')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('logTime') or colPickMode == 1 and data.containsKey('logTime')))">
a.logTime, a.logTime,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
a.createUserId, a.createUserId,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime, a.createTime,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
a.updateTime,
</if>
</trim> </trim>
</sql> </sql>
<!-- 新增 区分主键自增加还是业务插入 --> <!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="ErrorLogEntity" > <insert id="insert" parameterType="ErrorLogEntity" >
insert into `${tableName}` insert into `${tableName}`
(id,traceID,appName,hostName,message,platform,culprit,tags,level,environment,releaseVersion,fingerprint,threadNo,checkNum,errorStack,context,extra,logTime,createUserId,createTime) (id,traceID,appName,hostName,message,platform,culprit,tags,level,environment,releaseVersion,fingerprint,threadNo,checkNum,errorStack,context,extra,logTime,createUserId,createTime,updateTime)
VALUES VALUES
(#{id},#{traceID},#{appName},#{hostName},#{message},#{platform},#{culprit},#{tags},#{level},#{environment},#{releaseVersion},#{fingerprint},#{threadNo},#{checkNum},#{errorStack},#{context},#{extra},#{logTime},#{createUserId},#{createTime}) (#{id},#{traceID},#{appName},#{hostName},#{message},#{platform},#{culprit},#{tags},#{level},#{environment},#{releaseVersion},#{fingerprint},#{threadNo},#{checkNum},#{errorStack},#{context},#{extra},#{logTime},#{createUserId},#{createTime},#{updateTime})
</insert> </insert>
<!-- 批量新增 --> <!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto"> <insert id="insertBatch" parameterType="paramDto">
insert into `${tableName}` insert into `${tableName}`
(id,traceID,appName,hostName,message,platform,culprit,tags,level,environment,releaseVersion,fingerprint,threadNo,checkNum,errorStack,context,extra,logTime,createUserId,createTime) (id,traceID,appName,hostName,message,platform,culprit,tags,level,environment,releaseVersion,fingerprint,threadNo,checkNum,errorStack,context,extra,logTime,createUserId,createTime,updateTime)
VALUES VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," > <foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.id},#{item.traceID},#{item.appName},#{item.hostName},#{item.message},#{item.platform},#{item.culprit},#{item.tags},#{item.level},#{item.environment},#{item.releaseVersion},#{item.fingerprint},#{item.threadNo},#{item.checkNum},#{item.errorStack},#{item.context},#{item.extra},#{item.logTime},#{item.createUserId},#{item.createTime}) (#{item.id},#{item.traceID},#{item.appName},#{item.hostName},#{item.message},#{item.platform},#{item.culprit},#{item.tags},#{item.level},#{item.environment},#{item.releaseVersion},#{item.fingerprint},#{item.threadNo},#{item.checkNum},#{item.errorStack},#{item.context},#{item.extra},#{item.logTime},#{item.createUserId},#{item.createTime},#{item.updateTime})
</foreach> </foreach>
</insert> </insert>
...@@ -206,6 +211,9 @@ ...@@ -206,6 +211,9 @@
<if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))"> <if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
a.createTime=#{data.createTime}, a.createTime=#{data.createTime},
</if> </if>
<if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
a.updateTime=#{data.updateTime},
</if>
</trim> </trim>
<trim suffixOverrides="where" suffix=""> <trim suffixOverrides="where" suffix="">
where where
...@@ -218,149 +226,156 @@ ...@@ -218,149 +226,156 @@
<update id="updateBatch" parameterType="paramDto"> <update id="updateBatch" parameterType="paramDto">
update `${tableName}` as a update `${tableName}` as a
<trim prefix="set" suffixOverrides=","> <trim prefix="set" suffixOverrides=",">
<trim prefix="traceID=(case" suffix="ELSE traceID end),"> <trim prefix="traceID=(case" suffix="ELSE traceID end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('traceID')) or (colPickMode==1 and !item.containsKey('traceID'))"> <if test="(colPickMode==0 and item.containsKey('traceID')) or (colPickMode==1 and !item.containsKey('traceID'))">
when a.id=#{item.id} then #{item.traceID} when a.id=#{item.id} then #{item.traceID}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="appName=(case" suffix="ELSE appName end),"> <trim prefix="appName=(case" suffix="ELSE appName end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('appName')) or (colPickMode==1 and !item.containsKey('appName'))"> <if test="(colPickMode==0 and item.containsKey('appName')) or (colPickMode==1 and !item.containsKey('appName'))">
when a.id=#{item.id} then #{item.appName} when a.id=#{item.id} then #{item.appName}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="hostName=(case" suffix="ELSE hostName end),"> <trim prefix="hostName=(case" suffix="ELSE hostName end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('hostName')) or (colPickMode==1 and !item.containsKey('hostName'))"> <if test="(colPickMode==0 and item.containsKey('hostName')) or (colPickMode==1 and !item.containsKey('hostName'))">
when a.id=#{item.id} then #{item.hostName} when a.id=#{item.id} then #{item.hostName}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="message=(case" suffix="ELSE message end),"> <trim prefix="message=(case" suffix="ELSE message end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('message')) or (colPickMode==1 and !item.containsKey('message'))"> <if test="(colPickMode==0 and item.containsKey('message')) or (colPickMode==1 and !item.containsKey('message'))">
when a.id=#{item.id} then #{item.message} when a.id=#{item.id} then #{item.message}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="platform=(case" suffix="ELSE platform end),"> <trim prefix="platform=(case" suffix="ELSE platform end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('platform')) or (colPickMode==1 and !item.containsKey('platform'))"> <if test="(colPickMode==0 and item.containsKey('platform')) or (colPickMode==1 and !item.containsKey('platform'))">
when a.id=#{item.id} then #{item.platform} when a.id=#{item.id} then #{item.platform}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="culprit=(case" suffix="ELSE culprit end),"> <trim prefix="culprit=(case" suffix="ELSE culprit end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('culprit')) or (colPickMode==1 and !item.containsKey('culprit'))"> <if test="(colPickMode==0 and item.containsKey('culprit')) or (colPickMode==1 and !item.containsKey('culprit'))">
when a.id=#{item.id} then #{item.culprit} when a.id=#{item.id} then #{item.culprit}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="tags=(case" suffix="ELSE tags end),"> <trim prefix="tags=(case" suffix="ELSE tags end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('tags')) or (colPickMode==1 and !item.containsKey('tags'))"> <if test="(colPickMode==0 and item.containsKey('tags')) or (colPickMode==1 and !item.containsKey('tags'))">
when a.id=#{item.id} then #{item.tags} when a.id=#{item.id} then #{item.tags}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="level=(case" suffix="ELSE level end),"> <trim prefix="level=(case" suffix="ELSE level end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('level')) or (colPickMode==1 and !item.containsKey('level'))"> <if test="(colPickMode==0 and item.containsKey('level')) or (colPickMode==1 and !item.containsKey('level'))">
when a.id=#{item.id} then #{item.level} when a.id=#{item.id} then #{item.level}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="environment=(case" suffix="ELSE environment end),"> <trim prefix="environment=(case" suffix="ELSE environment end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('environment')) or (colPickMode==1 and !item.containsKey('environment'))"> <if test="(colPickMode==0 and item.containsKey('environment')) or (colPickMode==1 and !item.containsKey('environment'))">
when a.id=#{item.id} then #{item.environment} when a.id=#{item.id} then #{item.environment}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="releaseVersion=(case" suffix="ELSE releaseVersion end),"> <trim prefix="releaseVersion=(case" suffix="ELSE releaseVersion end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('releaseVersion')) or (colPickMode==1 and !item.containsKey('releaseVersion'))"> <if test="(colPickMode==0 and item.containsKey('releaseVersion')) or (colPickMode==1 and !item.containsKey('releaseVersion'))">
when a.id=#{item.id} then #{item.releaseVersion} when a.id=#{item.id} then #{item.releaseVersion}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="fingerprint=(case" suffix="ELSE fingerprint end),"> <trim prefix="fingerprint=(case" suffix="ELSE fingerprint end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('fingerprint')) or (colPickMode==1 and !item.containsKey('fingerprint'))"> <if test="(colPickMode==0 and item.containsKey('fingerprint')) or (colPickMode==1 and !item.containsKey('fingerprint'))">
when a.id=#{item.id} then #{item.fingerprint} when a.id=#{item.id} then #{item.fingerprint}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="threadNo=(case" suffix="ELSE threadNo end),"> <trim prefix="threadNo=(case" suffix="ELSE threadNo end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('threadNo')) or (colPickMode==1 and !item.containsKey('threadNo'))"> <if test="(colPickMode==0 and item.containsKey('threadNo')) or (colPickMode==1 and !item.containsKey('threadNo'))">
when a.id=#{item.id} then #{item.threadNo} when a.id=#{item.id} then #{item.threadNo}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="checkNum=(case" suffix="ELSE checkNum end),"> <trim prefix="checkNum=(case" suffix="ELSE checkNum end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<choose> <choose>
<when test="(colPickMode==0 and item.containsKey('checkNum')) or (colPickMode==1 and !item.containsKey('checkNum'))"> <when test="(colPickMode==0 and item.containsKey('checkNum')) or (colPickMode==1 and !item.containsKey('checkNum'))">
when a.id=#{item.id} then #{item.checkNum} when a.id=#{item.id} then #{item.checkNum}
</when> </when>
<when test="(colPickMode==0 and item.containsKey('checkNumIncrement')) or (colPickMode==1 and !item.containsKey('checkNumIncrement'))"> <when test="(colPickMode==0 and item.containsKey('checkNumIncrement')) or (colPickMode==1 and !item.containsKey('checkNumIncrement'))">
when a.id=#{item.id} then ifnull(a.checkNum,0) + #{item.checkNumIncrement} when a.id=#{item.id} then ifnull(a.checkNum,0) + #{item.checkNumIncrement}
</when> </when>
</choose> </choose>
</foreach> </foreach>
</trim> </trim>
<trim prefix="errorStack=(case" suffix="ELSE errorStack end),"> <trim prefix="errorStack=(case" suffix="ELSE errorStack end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('errorStack')) or (colPickMode==1 and !item.containsKey('errorStack'))"> <if test="(colPickMode==0 and item.containsKey('errorStack')) or (colPickMode==1 and !item.containsKey('errorStack'))">
when a.id=#{item.id} then #{item.errorStack} when a.id=#{item.id} then #{item.errorStack}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="context=(case" suffix="ELSE context end),"> <trim prefix="context=(case" suffix="ELSE context end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('context')) or (colPickMode==1 and !item.containsKey('context'))"> <if test="(colPickMode==0 and item.containsKey('context')) or (colPickMode==1 and !item.containsKey('context'))">
when a.id=#{item.id} then #{item.context} when a.id=#{item.id} then #{item.context}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="extra=(case" suffix="ELSE extra end),"> <trim prefix="extra=(case" suffix="ELSE extra end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('extra')) or (colPickMode==1 and !item.containsKey('extra'))"> <if test="(colPickMode==0 and item.containsKey('extra')) or (colPickMode==1 and !item.containsKey('extra'))">
when a.id=#{item.id} then #{item.extra} when a.id=#{item.id} then #{item.extra}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="logTime=(case" suffix="ELSE logTime end),"> <trim prefix="logTime=(case" suffix="ELSE logTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('logTime')) or (colPickMode==1 and !item.containsKey('logTime'))"> <if test="(colPickMode==0 and item.containsKey('logTime')) or (colPickMode==1 and !item.containsKey('logTime'))">
when a.id=#{item.id} then #{item.logTime} when a.id=#{item.id} then #{item.logTime}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="createUserId=(case" suffix="ELSE createUserId end),"> <trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<choose> <choose>
<when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))"> <when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
when a.id=#{item.id} then #{item.createUserId} when a.id=#{item.id} then #{item.createUserId}
</when> </when>
<when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))"> <when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement} when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
</when> </when>
</choose> </choose>
</foreach> </foreach>
</trim> </trim>
<trim prefix="createTime=(case" suffix="ELSE createTime end),"> <trim prefix="createTime=(case" suffix="ELSE createTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" > <foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))"> <if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
when a.id=#{item.id} then #{item.createTime} when a.id=#{item.id} then #{item.createTime}
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="updateTime=(case" suffix="ELSE updateTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('updateTime')) or (colPickMode==1 and !item.containsKey('updateTime'))">
when a.id=#{item.id} then #{item.updateTime}
</if>
</foreach>
</trim>
</trim> </trim>
where id in where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")"> <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
...@@ -462,437 +477,457 @@ ...@@ -462,437 +477,457 @@
${_conditionType_} a.id=#{${_conditionParam_}.id} ${_conditionType_} a.id=#{${_conditionParam_}.id}
</if> </if>
</if> </if>
<if test="conditionParamRef.containsKey('id')"> <if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null "> <if test="conditionParamRef.id != null ">
${_conditionType_} a.id = #{${_conditionParam_}.id} ${_conditionType_} a.id = #{${_conditionParam_}.id}
</if>
<if test="conditionParamRef.id == null">
${_conditionType_} a.id is null
</if>
</if>
<if test="conditionParamRef.containsKey('idList')">
${_conditionType_} a.id in
<foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
</if> </if>
<if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null"> <if test="conditionParamRef.id == null">
${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd} ${_conditionType_} a.id is null
</if> </if>
</if>
<if test="conditionParamRef.containsKey('idList')">
${_conditionType_} a.id in
<foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
</if>
<if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
</if>
<if test="conditionParamRef.containsKey('traceID')"> <if test="conditionParamRef.containsKey('traceID')">
<if test="conditionParamRef.traceID != null and conditionParamRef.traceID != ''"> <if test="conditionParamRef.traceID != null and conditionParamRef.traceID != ''">
${_conditionType_} a.traceID like #{${_conditionParam_}.traceID} ${_conditionType_} a.traceID like #{${_conditionParam_}.traceID}
</if>
<if test="conditionParamRef.traceID == null">
${_conditionType_} a.traceID is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('traceIDList')"> <if test="conditionParamRef.traceID == null">
${_conditionType_} a.traceID in ${_conditionType_} a.traceID is null
<foreach collection="conditionParamRef.traceIDList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('traceIDList')">
${_conditionType_} a.traceID in
<foreach collection="conditionParamRef.traceIDList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('appName')"> <if test="conditionParamRef.containsKey('appName')">
<if test="conditionParamRef.appName != null and conditionParamRef.appName != ''"> <if test="conditionParamRef.appName != null and conditionParamRef.appName != ''">
${_conditionType_} a.appName like #{${_conditionParam_}.appName} ${_conditionType_} a.appName like #{${_conditionParam_}.appName}
</if>
<if test="conditionParamRef.appName == null">
${_conditionType_} a.appName is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('appNameList')"> <if test="conditionParamRef.appName == null">
${_conditionType_} a.appName in ${_conditionType_} a.appName is null
<foreach collection="conditionParamRef.appNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('appNameList')">
${_conditionType_} a.appName in
<foreach collection="conditionParamRef.appNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('hostName')"> <if test="conditionParamRef.containsKey('hostName')">
<if test="conditionParamRef.hostName != null and conditionParamRef.hostName != ''"> <if test="conditionParamRef.hostName != null and conditionParamRef.hostName != ''">
${_conditionType_} a.hostName like #{${_conditionParam_}.hostName} ${_conditionType_} a.hostName like #{${_conditionParam_}.hostName}
</if>
<if test="conditionParamRef.hostName == null">
${_conditionType_} a.hostName is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('hostNameList')"> <if test="conditionParamRef.hostName == null">
${_conditionType_} a.hostName in ${_conditionType_} a.hostName is null
<foreach collection="conditionParamRef.hostNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('hostNameList')">
${_conditionType_} a.hostName in
<foreach collection="conditionParamRef.hostNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('message')"> <if test="conditionParamRef.containsKey('message')">
<if test="conditionParamRef.message != null and conditionParamRef.message != ''"> <if test="conditionParamRef.message != null and conditionParamRef.message != ''">
${_conditionType_} a.message like #{${_conditionParam_}.message} ${_conditionType_} a.message like #{${_conditionParam_}.message}
</if>
<if test="conditionParamRef.message == null">
${_conditionType_} a.message is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('messageList')"> <if test="conditionParamRef.message == null">
${_conditionType_} a.message in ${_conditionType_} a.message is null
<foreach collection="conditionParamRef.messageList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('messageList')">
${_conditionType_} a.message in
<foreach collection="conditionParamRef.messageList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('platform')"> <if test="conditionParamRef.containsKey('platform')">
<if test="conditionParamRef.platform != null and conditionParamRef.platform != ''"> <if test="conditionParamRef.platform != null and conditionParamRef.platform != ''">
${_conditionType_} a.platform like #{${_conditionParam_}.platform} ${_conditionType_} a.platform like #{${_conditionParam_}.platform}
</if>
<if test="conditionParamRef.platform == null">
${_conditionType_} a.platform is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('platformList')"> <if test="conditionParamRef.platform == null">
${_conditionType_} a.platform in ${_conditionType_} a.platform is null
<foreach collection="conditionParamRef.platformList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('platformList')">
${_conditionType_} a.platform in
<foreach collection="conditionParamRef.platformList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('culprit')"> <if test="conditionParamRef.containsKey('culprit')">
<if test="conditionParamRef.culprit != null and conditionParamRef.culprit != ''"> <if test="conditionParamRef.culprit != null and conditionParamRef.culprit != ''">
${_conditionType_} a.culprit like #{${_conditionParam_}.culprit} ${_conditionType_} a.culprit like #{${_conditionParam_}.culprit}
</if>
<if test="conditionParamRef.culprit == null">
${_conditionType_} a.culprit is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('culpritList')"> <if test="conditionParamRef.culprit == null">
${_conditionType_} a.culprit in ${_conditionType_} a.culprit is null
<foreach collection="conditionParamRef.culpritList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('culpritList')">
${_conditionType_} a.culprit in
<foreach collection="conditionParamRef.culpritList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('tags')"> <if test="conditionParamRef.containsKey('tags')">
<if test="conditionParamRef.tags != null and conditionParamRef.tags != ''"> <if test="conditionParamRef.tags != null and conditionParamRef.tags != ''">
${_conditionType_} a.tags like #{${_conditionParam_}.tags} ${_conditionType_} a.tags like #{${_conditionParam_}.tags}
</if>
<if test="conditionParamRef.tags == null">
${_conditionType_} a.tags is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('tagsList')"> <if test="conditionParamRef.tags == null">
${_conditionType_} a.tags in ${_conditionType_} a.tags is null
<foreach collection="conditionParamRef.tagsList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('tagsList')">
${_conditionType_} a.tags in
<foreach collection="conditionParamRef.tagsList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('level')"> <if test="conditionParamRef.containsKey('level')">
<if test="conditionParamRef.level != null and conditionParamRef.level != ''"> <if test="conditionParamRef.level != null and conditionParamRef.level != ''">
${_conditionType_} a.level like #{${_conditionParam_}.level} ${_conditionType_} a.level like #{${_conditionParam_}.level}
</if>
<if test="conditionParamRef.level == null">
${_conditionType_} a.level is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('levelList')"> <if test="conditionParamRef.level == null">
${_conditionType_} a.level in ${_conditionType_} a.level is null
<foreach collection="conditionParamRef.levelList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('levelList')">
${_conditionType_} a.level in
<foreach collection="conditionParamRef.levelList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('environment')"> <if test="conditionParamRef.containsKey('environment')">
<if test="conditionParamRef.environment != null and conditionParamRef.environment != ''"> <if test="conditionParamRef.environment != null and conditionParamRef.environment != ''">
${_conditionType_} a.environment like #{${_conditionParam_}.environment} ${_conditionType_} a.environment like #{${_conditionParam_}.environment}
</if>
<if test="conditionParamRef.environment == null">
${_conditionType_} a.environment is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('environmentList')"> <if test="conditionParamRef.environment == null">
${_conditionType_} a.environment in ${_conditionType_} a.environment is null
<foreach collection="conditionParamRef.environmentList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('environmentList')">
${_conditionType_} a.environment in
<foreach collection="conditionParamRef.environmentList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('releaseVersion')"> <if test="conditionParamRef.containsKey('releaseVersion')">
<if test="conditionParamRef.releaseVersion != null and conditionParamRef.releaseVersion != ''"> <if test="conditionParamRef.releaseVersion != null and conditionParamRef.releaseVersion != ''">
${_conditionType_} a.releaseVersion like #{${_conditionParam_}.releaseVersion} ${_conditionType_} a.releaseVersion like #{${_conditionParam_}.releaseVersion}
</if>
<if test="conditionParamRef.releaseVersion == null">
${_conditionType_} a.releaseVersion is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('releaseVersionList')"> <if test="conditionParamRef.releaseVersion == null">
${_conditionType_} a.releaseVersion in ${_conditionType_} a.releaseVersion is null
<foreach collection="conditionParamRef.releaseVersionList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('releaseVersionList')">
${_conditionType_} a.releaseVersion in
<foreach collection="conditionParamRef.releaseVersionList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('fingerprint')"> <if test="conditionParamRef.containsKey('fingerprint')">
<if test="conditionParamRef.fingerprint != null and conditionParamRef.fingerprint != ''"> <if test="conditionParamRef.fingerprint != null and conditionParamRef.fingerprint != ''">
${_conditionType_} a.fingerprint like #{${_conditionParam_}.fingerprint} ${_conditionType_} a.fingerprint like #{${_conditionParam_}.fingerprint}
</if>
<if test="conditionParamRef.fingerprint == null">
${_conditionType_} a.fingerprint is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('fingerprintList')"> <if test="conditionParamRef.fingerprint == null">
${_conditionType_} a.fingerprint in ${_conditionType_} a.fingerprint is null
<foreach collection="conditionParamRef.fingerprintList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('fingerprintList')">
${_conditionType_} a.fingerprint in
<foreach collection="conditionParamRef.fingerprintList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('threadNo')"> <if test="conditionParamRef.containsKey('threadNo')">
<if test="conditionParamRef.threadNo != null and conditionParamRef.threadNo != ''"> <if test="conditionParamRef.threadNo != null and conditionParamRef.threadNo != ''">
${_conditionType_} a.threadNo like #{${_conditionParam_}.threadNo} ${_conditionType_} a.threadNo like #{${_conditionParam_}.threadNo}
</if>
<if test="conditionParamRef.threadNo == null">
${_conditionType_} a.threadNo is null
</if>
</if>
<if test="conditionParamRef.containsKey('threadNoList')">
${_conditionType_} a.threadNo in
<foreach collection="conditionParamRef.threadNoList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
<if test="conditionParamRef.containsKey('checkNum')"> <if test="conditionParamRef.threadNo == null">
<if test="conditionParamRef.checkNum != null "> ${_conditionType_} a.threadNo is null
${_conditionType_} a.checkNum = #{${_conditionParam_}.checkNum}
</if>
<if test="conditionParamRef.checkNum == null">
${_conditionType_} a.checkNum is null
</if>
</if>
<if test="conditionParamRef.containsKey('checkNumList')">
${_conditionType_} a.checkNum in
<foreach collection="conditionParamRef.checkNumList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
<if test="conditionParamRef.containsKey('checkNumStart') and conditionParamRef.checkNumStart != null"> </if>
${_conditionType_} a.checkNum <![CDATA[ >= ]]> #{${_conditionParam_}.checkNumStart} <if test="conditionParamRef.containsKey('threadNoList')">
${_conditionType_} a.threadNo in
<foreach collection="conditionParamRef.threadNoList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('checkNum')">
<if test="conditionParamRef.checkNum != null ">
${_conditionType_} a.checkNum = #{${_conditionParam_}.checkNum}
</if> </if>
<if test="conditionParamRef.containsKey('checkNumEnd') and conditionParamRef.checkNumEnd != null"> <if test="conditionParamRef.checkNum == null">
${_conditionType_} a.checkNum <![CDATA[ <= ]]> #{${_conditionParam_}.checkNumEnd} ${_conditionType_} a.checkNum is null
</if> </if>
</if>
<if test="conditionParamRef.containsKey('checkNumList')">
${_conditionType_} a.checkNum in
<foreach collection="conditionParamRef.checkNumList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('checkNumStart') and conditionParamRef.checkNumStart != null">
${_conditionType_} a.checkNum <![CDATA[ >= ]]> #{${_conditionParam_}.checkNumStart}
</if>
<if test="conditionParamRef.containsKey('checkNumEnd') and conditionParamRef.checkNumEnd != null">
${_conditionType_} a.checkNum <![CDATA[ <= ]]> #{${_conditionParam_}.checkNumEnd}
</if>
<if test="conditionParamRef.containsKey('errorStack')"> <if test="conditionParamRef.containsKey('errorStack')">
<if test="conditionParamRef.errorStack != null and conditionParamRef.errorStack != ''"> <if test="conditionParamRef.errorStack != null and conditionParamRef.errorStack != ''">
${_conditionType_} a.errorStack like #{${_conditionParam_}.errorStack} ${_conditionType_} a.errorStack like #{${_conditionParam_}.errorStack}
</if>
<if test="conditionParamRef.errorStack == null">
${_conditionType_} a.errorStack is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('errorStackList')"> <if test="conditionParamRef.errorStack == null">
${_conditionType_} a.errorStack in ${_conditionType_} a.errorStack is null
<foreach collection="conditionParamRef.errorStackList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('errorStackList')">
${_conditionType_} a.errorStack in
<foreach collection="conditionParamRef.errorStackList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('context')"> <if test="conditionParamRef.containsKey('context')">
<if test="conditionParamRef.context != null and conditionParamRef.context != ''"> <if test="conditionParamRef.context != null and conditionParamRef.context != ''">
${_conditionType_} a.context like #{${_conditionParam_}.context} ${_conditionType_} a.context like #{${_conditionParam_}.context}
</if>
<if test="conditionParamRef.context == null">
${_conditionType_} a.context is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('contextList')"> <if test="conditionParamRef.context == null">
${_conditionType_} a.context in ${_conditionType_} a.context is null
<foreach collection="conditionParamRef.contextList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('contextList')">
${_conditionType_} a.context in
<foreach collection="conditionParamRef.contextList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('extra')"> <if test="conditionParamRef.containsKey('extra')">
<if test="conditionParamRef.extra != null and conditionParamRef.extra != ''"> <if test="conditionParamRef.extra != null and conditionParamRef.extra != ''">
${_conditionType_} a.extra like #{${_conditionParam_}.extra} ${_conditionType_} a.extra like #{${_conditionParam_}.extra}
</if>
<if test="conditionParamRef.extra == null">
${_conditionType_} a.extra is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('extraList')"> <if test="conditionParamRef.extra == null">
${_conditionType_} a.extra in ${_conditionType_} a.extra is null
<foreach collection="conditionParamRef.extraList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
</if>
<if test="conditionParamRef.containsKey('extraList')">
${_conditionType_} a.extra in
<foreach collection="conditionParamRef.extraList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('logTime')"> <if test="conditionParamRef.containsKey('logTime')">
<if test="conditionParamRef.logTime != null "> <if test="conditionParamRef.logTime != null ">
${_conditionType_} a.logTime = #{${_conditionParam_}.logTime} ${_conditionType_} a.logTime = #{${_conditionParam_}.logTime}
</if>
<if test="conditionParamRef.logTime == null">
${_conditionType_} a.logTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('logTimeStart') and conditionParamRef.logTimeStart != null and conditionParamRef.logTimeStart!=''">
${_conditionType_} a.logTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.logTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('logTimeEnd') and conditionParamRef.logTimeEnd != null and conditionParamRef.logTimeEnd!=''">
${_conditionType_} a.logTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.logTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createUserId')">
<if test="conditionParamRef.createUserId != null ">
${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
</if>
<if test="conditionParamRef.createUserId == null">
${_conditionType_} a.createUserId is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('createUserIdList')"> <if test="conditionParamRef.logTime == null">
${_conditionType_} a.createUserId in ${_conditionType_} a.logTime is null
<foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if> </if>
<if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null"> </if>
${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart} <if test="conditionParamRef.containsKey('logTimeStart') and conditionParamRef.logTimeStart != null and conditionParamRef.logTimeStart!=''">
${_conditionType_} a.logTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.logTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('logTimeEnd') and conditionParamRef.logTimeEnd != null and conditionParamRef.logTimeEnd!=''">
${_conditionType_} a.logTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.logTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createUserId')">
<if test="conditionParamRef.createUserId != null ">
${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
</if> </if>
<if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null"> <if test="conditionParamRef.createUserId == null">
${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd} ${_conditionType_} a.createUserId is null
</if> </if>
</if>
<if test="conditionParamRef.containsKey('createUserIdList')">
${_conditionType_} a.createUserId in
<foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
</if>
<if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
</if>
<if test="conditionParamRef.containsKey('createTime')"> <if test="conditionParamRef.containsKey('createTime')">
<if test="conditionParamRef.createTime != null "> <if test="conditionParamRef.createTime != null ">
${_conditionType_} a.createTime = #{${_conditionParam_}.createTime} ${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
</if> </if>
<if test="conditionParamRef.createTime == null"> <if test="conditionParamRef.createTime == null">
${_conditionType_} a.createTime is null ${_conditionType_} a.createTime is null
</if>
</if> </if>
<if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''"> </if>
${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') <if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('updateTime')">
<if test="conditionParamRef.updateTime != null ">
${_conditionType_} a.updateTime = #{${_conditionParam_}.updateTime}
</if> </if>
<if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''"> <if test="conditionParamRef.updateTime == null">
${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ${_conditionType_} a.updateTime is null
</if> </if>
</if>
<if test="conditionParamRef.containsKey('updateTimeStart') and conditionParamRef.updateTimeStart != null and conditionParamRef.updateTimeStart!=''">
${_conditionType_} a.updateTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''">
${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
</sql> </sql>
<sql id="_orderCols_"> <sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()"> <if test="orderColList != null and !orderColList.isEmpty()">
order by order by
<trim suffixOverrides="," suffix=""> <trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=","> <foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind} ${item.colName} ${item.sortKind}
</foreach> </foreach>
</trim> </trim>
</if> </if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()"> <if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by order by
<trim suffixOverrides="," suffix=""> <trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')"> <if test="orderCol.containsKey('id')">
a.id a.id
<if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if> <if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('traceID')"> <if test="orderCol.containsKey('traceID')">
a.traceID a.traceID
<if test='orderCol.traceID != null and "DESC".equalsIgnoreCase(orderCol.traceID)'>DESC</if> <if test='orderCol.traceID != null and "DESC".equalsIgnoreCase(orderCol.traceID)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('appName')"> <if test="orderCol.containsKey('appName')">
a.appName a.appName
<if test='orderCol.appName != null and "DESC".equalsIgnoreCase(orderCol.appName)'>DESC</if> <if test='orderCol.appName != null and "DESC".equalsIgnoreCase(orderCol.appName)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('hostName')"> <if test="orderCol.containsKey('hostName')">
a.hostName a.hostName
<if test='orderCol.hostName != null and "DESC".equalsIgnoreCase(orderCol.hostName)'>DESC</if> <if test='orderCol.hostName != null and "DESC".equalsIgnoreCase(orderCol.hostName)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('message')"> <if test="orderCol.containsKey('message')">
a.message a.message
<if test='orderCol.message != null and "DESC".equalsIgnoreCase(orderCol.message)'>DESC</if> <if test='orderCol.message != null and "DESC".equalsIgnoreCase(orderCol.message)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('platform')"> <if test="orderCol.containsKey('platform')">
a.platform a.platform
<if test='orderCol.platform != null and "DESC".equalsIgnoreCase(orderCol.platform)'>DESC</if> <if test='orderCol.platform != null and "DESC".equalsIgnoreCase(orderCol.platform)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('culprit')"> <if test="orderCol.containsKey('culprit')">
a.culprit a.culprit
<if test='orderCol.culprit != null and "DESC".equalsIgnoreCase(orderCol.culprit)'>DESC</if> <if test='orderCol.culprit != null and "DESC".equalsIgnoreCase(orderCol.culprit)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('tags')"> <if test="orderCol.containsKey('tags')">
a.tags a.tags
<if test='orderCol.tags != null and "DESC".equalsIgnoreCase(orderCol.tags)'>DESC</if> <if test='orderCol.tags != null and "DESC".equalsIgnoreCase(orderCol.tags)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('level')"> <if test="orderCol.containsKey('level')">
a.level a.level
<if test='orderCol.level != null and "DESC".equalsIgnoreCase(orderCol.level)'>DESC</if> <if test='orderCol.level != null and "DESC".equalsIgnoreCase(orderCol.level)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('environment')"> <if test="orderCol.containsKey('environment')">
a.environment a.environment
<if test='orderCol.environment != null and "DESC".equalsIgnoreCase(orderCol.environment)'>DESC</if> <if test='orderCol.environment != null and "DESC".equalsIgnoreCase(orderCol.environment)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('releaseVersion')"> <if test="orderCol.containsKey('releaseVersion')">
a.releaseVersion a.releaseVersion
<if test='orderCol.releaseVersion != null and "DESC".equalsIgnoreCase(orderCol.releaseVersion)'>DESC</if> <if test='orderCol.releaseVersion != null and "DESC".equalsIgnoreCase(orderCol.releaseVersion)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('fingerprint')"> <if test="orderCol.containsKey('fingerprint')">
a.fingerprint a.fingerprint
<if test='orderCol.fingerprint != null and "DESC".equalsIgnoreCase(orderCol.fingerprint)'>DESC</if> <if test='orderCol.fingerprint != null and "DESC".equalsIgnoreCase(orderCol.fingerprint)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('threadNo')"> <if test="orderCol.containsKey('threadNo')">
a.threadNo a.threadNo
<if test='orderCol.threadNo != null and "DESC".equalsIgnoreCase(orderCol.threadNo)'>DESC</if> <if test='orderCol.threadNo != null and "DESC".equalsIgnoreCase(orderCol.threadNo)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('checkNum')"> <if test="orderCol.containsKey('checkNum')">
a.checkNum a.checkNum
<if test='orderCol.checkNum != null and "DESC".equalsIgnoreCase(orderCol.checkNum)'>DESC</if> <if test='orderCol.checkNum != null and "DESC".equalsIgnoreCase(orderCol.checkNum)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('errorStack')"> <if test="orderCol.containsKey('errorStack')">
a.errorStack a.errorStack
<if test='orderCol.errorStack != null and "DESC".equalsIgnoreCase(orderCol.errorStack)'>DESC</if> <if test='orderCol.errorStack != null and "DESC".equalsIgnoreCase(orderCol.errorStack)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('context')"> <if test="orderCol.containsKey('context')">
a.context a.context
<if test='orderCol.context != null and "DESC".equalsIgnoreCase(orderCol.context)'>DESC</if> <if test='orderCol.context != null and "DESC".equalsIgnoreCase(orderCol.context)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('extra')"> <if test="orderCol.containsKey('extra')">
a.extra a.extra
<if test='orderCol.extra != null and "DESC".equalsIgnoreCase(orderCol.extra)'>DESC</if> <if test='orderCol.extra != null and "DESC".equalsIgnoreCase(orderCol.extra)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('logTime')"> <if test="orderCol.containsKey('logTime')">
a.logTime a.logTime
<if test='orderCol.logTime != null and "DESC".equalsIgnoreCase(orderCol.logTime)'>DESC</if> <if test='orderCol.logTime != null and "DESC".equalsIgnoreCase(orderCol.logTime)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('createUserId')"> <if test="orderCol.containsKey('createUserId')">
a.createUserId a.createUserId
<if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if> <if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('createTime')"> <if test="orderCol.containsKey('createTime')">
a.createTime a.createTime
<if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if> <if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('updateTime')">
a.updateTime
<if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if>
,
</if>
</trim> </trim>
</if> </if>
</sql> </sql>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment