opt: es查询优化,前端界面优化,解析SQL,复制SQL,去除lucene
This commit is contained in:
@@ -64,6 +64,7 @@
|
||||
"qs": "^6.9.1",
|
||||
"screenfull": "4.2.0",
|
||||
"sortablejs": "1.8.4",
|
||||
"sql-formatter": "^15.6.2",
|
||||
"throttle-debounce": "^5.0.0",
|
||||
"vue": "2.6.10",
|
||||
"vue-bus": "^1.2.1",
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
</el-form>
|
||||
</div>
|
||||
<!--表格渲染-->
|
||||
<el-card shadow="hover" style="width: 100%" class="log-warpper">
|
||||
<el-card shadow="hover" style="width: 100%; height: 620px; overflow-y: auto" class="log-warpper">
|
||||
<div style="width: 100%">
|
||||
<div v-for="(log, index) in logs" :key="index">
|
||||
<div v-if="compressedView" style="margin-bottom: 5px; font-size: 16px;">
|
||||
@@ -96,91 +96,85 @@
|
||||
{{ log.message }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-else style="margin-bottom: 5px; font-size: 16px; border: #999999 1px solid; padding: 5px;">
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<div v-else class="log-detailed">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
时间:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #000000;">{{ timestampToDate(log.time) }}</span>
|
||||
<span class="log-time">{{ timestampToDate(log.time) }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
host:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #048815;">{{ log.host }}</span>
|
||||
<span class="log-host">{{ log.host }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
执行IP:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #000569;">{{ log.currIp === null ? '0.0.0.0' : log.currIp }}</span>
|
||||
<span class="log-ip">{{ log.currIp === null ? '0.0.0.0' : log.currIp }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
API路径:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #b9de16;">{{ log.apiPath === null ? '无' : log.apiPath }}</span>
|
||||
<span class="log-api">{{ log.apiPath === null ? '无' : log.apiPath }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
MDC标签:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #d20118;">{{ log.tag === null ? '未配置MDC' : log.tag }}</span>
|
||||
<span class="log-tag">{{ log.tag === null ? '未配置MDC' : log.tag }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
日志级别:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #111fc7;">{{ log.severity }}</span>
|
||||
<span :class="['log-level', getLevelClass(log.severity)]">{{ log.severity }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
类名:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #111fc7;">{{ log.logger }}</span>
|
||||
<span class="log-logger">{{ log.logger }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
线程名:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #28b23a;">{{ log.thread }}</span>
|
||||
<span class="log-thread">{{ log.thread }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
链路标识:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span style="color: #d51313;">{{ log.tlogTraceId === null ? '无链路id' : log.tlogTraceId }}</span>
|
||||
<span class="log-trace">{{ log.tlogTraceId === null ? '无链路id' : log.tlogTraceId }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-row class="log-row">
|
||||
<el-col :span="2" class="log-label">
|
||||
日志信息:
|
||||
</el-col>
|
||||
<el-col :span="22">
|
||||
<span
|
||||
style="color: #000000;"
|
||||
class="sql-message"
|
||||
@click="handleCopySQL(log.message)"
|
||||
>
|
||||
{{ log.message }}
|
||||
</span>
|
||||
<span class="log-message sql-message" @click="handleCopySQL(log.message)">{{ transSQL(log.message) }}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
@@ -203,7 +197,6 @@
|
||||
|
||||
<script>
|
||||
import luceneOperation from '@/views/lucene/api/lucene'
|
||||
import { default as AnsiUp } from 'ansi_up'
|
||||
export default {
|
||||
name: 'LuceneLog',
|
||||
data() {
|
||||
@@ -245,6 +238,16 @@ export default {
|
||||
this.getTagList()
|
||||
},
|
||||
methods: {
|
||||
getLevelClass(level) {
|
||||
if (!level) return 'level-unknown'
|
||||
switch (level.toUpperCase()) {
|
||||
case 'ERROR': return 'level-error'
|
||||
case 'WARN': return 'level-warn'
|
||||
case 'DEBUG': return 'level-debug'
|
||||
case 'INFO': return 'level-info'
|
||||
default: return 'level-unknown'
|
||||
}
|
||||
},
|
||||
timestampToDate(timestamp) {
|
||||
const date = new Date(timestamp)
|
||||
const year = date.getFullYear()
|
||||
@@ -270,7 +273,16 @@ export default {
|
||||
this.$message.warning('未检测到可复制的SQL语句')
|
||||
}
|
||||
},
|
||||
transSQL(message) {
|
||||
const sqlMatch = message.match(/\[ SQL: ([^\]]+)\s*\]/)
|
||||
|
||||
// 兼容性更好的写法
|
||||
if (!sqlMatch || !sqlMatch[1]) {
|
||||
return message
|
||||
}
|
||||
const rawSQL = sqlMatch[1].trim()
|
||||
return rawSQL
|
||||
},
|
||||
// 复制文本到剪贴板
|
||||
copyToClipboard(text) {
|
||||
// 现代浏览器方法
|
||||
@@ -341,13 +353,148 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 可点击样式提示 */
|
||||
/* 详细视图样式 */
|
||||
.log-detailed {
|
||||
padding: 10px;
|
||||
border: 1px solid #EBEEF5;
|
||||
border-radius: 4px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.log-row {
|
||||
margin-bottom: 5px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.log-label {
|
||||
font-weight: 600;
|
||||
color: #606266;
|
||||
text-align: right;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
/* 日志元素样式 */
|
||||
.log-time {
|
||||
color: #303133;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.log-ip {
|
||||
color: #000569;
|
||||
padding: 2px 4px;
|
||||
background-color: #f0f9ff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.log-level {
|
||||
font-weight: bold;
|
||||
padding: 2px 6px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.level-error .log-level,
|
||||
.log-level.level-error {
|
||||
background-color: #fef0f0;
|
||||
color: #F56C6C;
|
||||
}
|
||||
|
||||
.level-warn .log-level,
|
||||
.log-level.level-warn {
|
||||
background-color: #fdf6ec;
|
||||
color: #E6A23C;
|
||||
}
|
||||
|
||||
.level-info .log-level,
|
||||
.log-level.level-info {
|
||||
background-color: #ecf5ff;
|
||||
color: #409EFF;
|
||||
}
|
||||
|
||||
.level-debug .log-level,
|
||||
.log-level.level-debug {
|
||||
background-color: #f0f9eb;
|
||||
color: #67C23A;
|
||||
}
|
||||
|
||||
.log-logger {
|
||||
color: #3498db;
|
||||
font-family: monospace;
|
||||
max-width: 300px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.log-thread {
|
||||
color: #28b23a;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.log-trace {
|
||||
color: #d51313;
|
||||
font-family: monospace;
|
||||
background-color: #fff7f7;
|
||||
padding: 2px 4px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.log-host {
|
||||
color: #048815;
|
||||
}
|
||||
|
||||
.log-api {
|
||||
color: #8c6a03;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.log-tag {
|
||||
color: #d20118;
|
||||
}
|
||||
|
||||
.log-message {
|
||||
color: #000000;
|
||||
display: block;
|
||||
margin-top: 4px;
|
||||
padding: 6px;
|
||||
background-color: #f8f8f8;
|
||||
border-radius: 3px;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
/* SQL语句样式 */
|
||||
.sql-message {
|
||||
cursor: pointer;
|
||||
transition: all 0.3s;
|
||||
position: relative;
|
||||
background: #f4faff;
|
||||
color: #2d8cf0;
|
||||
font-weight: bold;
|
||||
border-left: 3px solid #2d8cf0;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
|
||||
.sql-message:hover {
|
||||
background-color: #f0f9ff;
|
||||
box-shadow: 0 0 3px rgba(32, 160, 255, 0.5);
|
||||
background-color: #ecf5ff;
|
||||
box-shadow: 0 0 6px rgba(32, 160, 255, 0.3);
|
||||
}
|
||||
|
||||
.sql-message:hover::after {
|
||||
content: "点击复制SQL";
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 3px;
|
||||
font-size: 12px;
|
||||
color: #409EFF;
|
||||
background-color: #ecf5ff;
|
||||
padding: 2px 5px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.sql-message.copied {
|
||||
background: #e1f3d8;
|
||||
color: #67c23a;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user