fix:lucene日志地址
This commit is contained in:
@@ -2,7 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
export function getLogData(param) {
|
||||
return request({
|
||||
url: 'api/lucene/getAll',
|
||||
url: 'api/lucene/query',
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
@@ -16,14 +16,14 @@ export function getTagName() {
|
||||
}
|
||||
export function deleteAllLog() {
|
||||
return request({
|
||||
url: 'api/lucene/deleteAllLog',
|
||||
url: 'api/lucene/clearLogs',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function labelsValues() {
|
||||
return request({
|
||||
url: 'api/loki/labels/values',
|
||||
url: 'api/lucene/labels/values',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -7,24 +7,9 @@
|
||||
label-width="=100px"
|
||||
label-suffix=":"
|
||||
>
|
||||
<el-form-item :label="$t('Log.label')">
|
||||
<el-select
|
||||
v-model="query.label"
|
||||
clearable
|
||||
size="mini"
|
||||
:placeholder="$t('Log.label')"
|
||||
style="width: 240px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in tagList"
|
||||
:label="item"
|
||||
:value="item"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('Log.level')">
|
||||
<el-select
|
||||
v-model="query.level"
|
||||
v-model="query.logLevel"
|
||||
clearable
|
||||
size="mini"
|
||||
:placeholder="$t('Log.level')"
|
||||
@@ -36,6 +21,14 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="Request Method">
|
||||
<el-input
|
||||
v-model="query.requestMethod"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="GET/POST/PUT/DELETE"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('Log.search')">
|
||||
<el-input
|
||||
v-model="query.message"
|
||||
@@ -46,7 +39,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('Log.link_id')">
|
||||
<el-input
|
||||
v-model="query.tlogTraceId"
|
||||
v-model="query.traceId"
|
||||
clearable
|
||||
size="mini"
|
||||
:placeholder="$t('Log.link_id_msg')"
|
||||
@@ -71,9 +64,17 @@
|
||||
</div>
|
||||
<!--表格渲染-->
|
||||
<el-card shadow="hover" style="width: 100%" class="log-warpper">
|
||||
<div style="width: 100%">
|
||||
<div v-for="(log, index) in logs" :key="index">
|
||||
<div style="margin-bottom: 5px; font-size: 14px;" v-html="log" />
|
||||
<div class="log-list">
|
||||
<div v-for="(log, index) in logs" :key="index" class="log-item">
|
||||
<div class="log-meta">
|
||||
<span v-if="log.requestTime" class="log-time log-badge log-badge-time">{{ log.requestTime }}</span>
|
||||
<span class="log-level" :class="`log-level-${getLevelClass(log.logLevel)}`">{{ log.logLevel || 'UNKNOWN' }}</span>
|
||||
<span v-if="log.requestIp" class="log-ip log-badge log-badge-ip">IP: {{ log.requestIp }}</span>
|
||||
<span v-if="log.requestMethod" class="log-method log-badge log-badge-method">{{ log.requestMethod }}</span>
|
||||
<span v-if="log.traceId && log.traceId.trim()" class="log-trace log-badge log-badge-trace">traceId: {{ log.traceId }}</span>
|
||||
<span v-if="log.thread" class="log-thread log-badge log-badge-thread">{{ log.thread }}</span>
|
||||
</div>
|
||||
<div class="log-message" v-html="log.messageHtml" />
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
@@ -120,8 +121,12 @@ export default {
|
||||
logs: [],
|
||||
tagList: [],
|
||||
query: {
|
||||
tlogTraceId: '',
|
||||
traceId: '',
|
||||
requestMethod: '',
|
||||
message: '',
|
||||
logLevel: '',
|
||||
startTime: '',
|
||||
endTime: '',
|
||||
page: 0,
|
||||
size: 100,
|
||||
total: 0,
|
||||
@@ -131,7 +136,7 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.queryData()
|
||||
this.getTagList()
|
||||
// this.getTagList()
|
||||
},
|
||||
methods: {
|
||||
handleSizeChange(val) {
|
||||
@@ -142,25 +147,44 @@ export default {
|
||||
this.query.page = val
|
||||
this.queryData()
|
||||
},
|
||||
getTagList() {
|
||||
luceneOperation.getTagName().then(res => {
|
||||
this.tagList = res
|
||||
})
|
||||
getLevelClass(level) {
|
||||
const normalizedLevel = (level || '').toUpperCase()
|
||||
const levelMap = {
|
||||
ERROR: 'error',
|
||||
WARN: 'warn',
|
||||
INFO: 'info',
|
||||
DEBUG: 'debug'
|
||||
}
|
||||
return levelMap[normalizedLevel] || 'default'
|
||||
},
|
||||
formatLogMessage(item, ansi_up) {
|
||||
const rawMessage = item && typeof item === 'object'
|
||||
? item.message || JSON.stringify(item)
|
||||
: String(item || '')
|
||||
return {
|
||||
requestTime: item && item.requestTime,
|
||||
requestIp: item && item.requestIp,
|
||||
requestMethod: item && item.requestMethod,
|
||||
logLevel: item && item.logLevel,
|
||||
thread: item && item.thread,
|
||||
traceId: item && item.traceId,
|
||||
messageHtml: ansi_up.ansi_to_html(rawMessage)
|
||||
}
|
||||
},
|
||||
queryData() {
|
||||
if (this.query.createTime) {
|
||||
if (this.query.createTime && this.query.createTime.length === 2) {
|
||||
this.query.startTime = this.query.createTime[0]
|
||||
this.query.endTime = this.query.createTime[1]
|
||||
} else {
|
||||
this.query.startTime = ''
|
||||
this.query.endTime = ''
|
||||
}
|
||||
luceneOperation.getLogData(this.query).then(res => {
|
||||
this.logs = [] // 清空
|
||||
this.logs = []
|
||||
var ansi_up = new AnsiUp()
|
||||
// 数据初始化
|
||||
for (const i in res.content) {
|
||||
this.logs[i] = ansi_up.ansi_to_html(res.content[i])
|
||||
}
|
||||
// this.logs = res.content
|
||||
this.query.total = res.totalElements
|
||||
const page = Array.isArray(res.page) ? res.page : []
|
||||
this.logs = page.map(item => this.formatLogMessage(item, ansi_up))
|
||||
this.query.total = res.total || 0
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -168,5 +192,114 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.log-list {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.log-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 10px 12px;
|
||||
border-radius: 6px;
|
||||
background: #fafafa;
|
||||
border: 1px solid #ebeef5;
|
||||
}
|
||||
|
||||
.log-meta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
margin-bottom: 6px;
|
||||
font-size: 12px;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.log-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 0 8px;
|
||||
line-height: 22px;
|
||||
border-radius: 11px;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.log-time,
|
||||
.log-ip,
|
||||
.log-method,
|
||||
.log-thread,
|
||||
.log-trace {
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.log-badge-time {
|
||||
color: #606266;
|
||||
background: #f4f4f5;
|
||||
border-color: #dcdfe6;
|
||||
}
|
||||
|
||||
.log-badge-ip {
|
||||
color: #7c4dff;
|
||||
background: #f3edff;
|
||||
border-color: #d9c8ff;
|
||||
}
|
||||
|
||||
.log-badge-method {
|
||||
color: #0f766e;
|
||||
background: #ecfdf5;
|
||||
border-color: #b7ebd3;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.log-badge-thread {
|
||||
color: #8e44ad;
|
||||
background: #f8f0ff;
|
||||
border-color: #e2cfff;
|
||||
}
|
||||
|
||||
.log-badge-trace {
|
||||
color: #c05621;
|
||||
background: #fff7ed;
|
||||
border-color: #fbd38d;
|
||||
}
|
||||
|
||||
.log-level {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 56px;
|
||||
padding: 0 8px;
|
||||
line-height: 20px;
|
||||
border-radius: 10px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.log-level-error {
|
||||
background: #f56c6c;
|
||||
}
|
||||
|
||||
.log-level-warn {
|
||||
background: #e6a23c;
|
||||
}
|
||||
|
||||
.log-level-info {
|
||||
background: #409eff;
|
||||
}
|
||||
|
||||
.log-level-debug {
|
||||
background: #909399;
|
||||
}
|
||||
|
||||
.log-level-default {
|
||||
background: #67c23a;
|
||||
}
|
||||
|
||||
.log-message {
|
||||
font-size: 14px;
|
||||
line-height: 1.7;
|
||||
color: #303133;
|
||||
word-break: break-word;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user