mirror of
https://github.com/gotoeasy/glogcenter.git
synced 2025-09-15 12:58:34 +08:00
日志级别条件支持多选
This commit is contained in:
parent
b96909f71b
commit
451f8975b2
@ -48,7 +48,7 @@ func (e *Engine) AddLogDataModel(data *logdata.LogDataModel) {
|
||||
e.logStorage.AddLogDataModel(data)
|
||||
}
|
||||
|
||||
func (e *Engine) Search(searchKey string, system string, minDatetime string, maxDatetime string, loglevel string,
|
||||
func (e *Engine) Search(searchKey string, system string, minDatetime string, maxDatetime string, loglevel string, loglevels []string,
|
||||
currentDocId uint32, forward bool) *search.SearchResult {
|
||||
|
||||
// 分词后检索
|
||||
@ -80,7 +80,7 @@ func (e *Engine) Search(searchKey string, system string, minDatetime string, max
|
||||
}
|
||||
|
||||
// 多关键词查询模式
|
||||
return search.SearchWordIndex(e.storeName, kws, currentDocId, forward, minDatetime, maxDatetime)
|
||||
return search.SearchWordIndex(e.storeName, kws, loglevels, currentDocId, forward, minDatetime, maxDatetime)
|
||||
}
|
||||
|
||||
// 添加日志
|
||||
|
||||
@ -46,7 +46,7 @@ func Test_all(t *testing.T) {
|
||||
// }
|
||||
// time.Sleep(time.Duration(5) * time.Second)
|
||||
|
||||
rs := engine.Search(` them java `, "", "", "", "", 0, true)
|
||||
rs := engine.Search(` them java `, "", "", "", "", make([]string, 0), 0, true)
|
||||
cmn.Println("共查到", rs.Total, "件")
|
||||
for _, v := range rs.Data {
|
||||
cmn.Println(v.Id, v.Text)
|
||||
|
||||
@ -31,7 +31,7 @@ type WidxStorage struct {
|
||||
}
|
||||
|
||||
// 多关键词时计算关键词索引交集
|
||||
func SearchWordIndex(storeName string, kws []string, currentDocId uint32, forward bool, minDatetime string, maxDatetime string) *SearchResult {
|
||||
func SearchWordIndex(storeName string, kws []string, loglevels []string, currentDocId uint32, forward bool, minDatetime string, maxDatetime string) *SearchResult {
|
||||
storeLogData := storage.NewLogDataStorageHandle(storeName) // 数据
|
||||
|
||||
// 时间条件范围判断,默认全部,有检索条件时调整范围
|
||||
@ -75,7 +75,7 @@ func SearchWordIndex(storeName string, kws []string, currentDocId uint32, forwar
|
||||
}
|
||||
widxs = append(widxs, widxStorage)
|
||||
}
|
||||
return findSame(currentDocId, forward, minDocumentId, maxDocumentId, storeLogData, widxs...)
|
||||
return findSame(currentDocId, loglevels, forward, minDocumentId, maxDocumentId, storeLogData, widxs...)
|
||||
}
|
||||
|
||||
// 无关键词时走全量检索
|
||||
@ -205,8 +205,9 @@ func SearchLogData(storeName string, currentDocId uint32, forward bool, minDatet
|
||||
}
|
||||
|
||||
// 参数widxs长度要求大于1,currentDocId不传就是查第一页
|
||||
func findSame(currentDocId uint32, forward bool, minDocumentId uint32, maxDocumentId uint32, storeLogData *storage.LogDataStorageHandle, widxs ...*WidxStorage) *SearchResult {
|
||||
func findSame(currentDocId uint32, loglevels []string, forward bool, minDocumentId uint32, maxDocumentId uint32, storeLogData *storage.LogDataStorageHandle, widxs ...*WidxStorage) *SearchResult {
|
||||
|
||||
allloglevels := cmn.Join(loglevels, ",")
|
||||
var rs = new(SearchResult)
|
||||
rs.Total = cmn.Uint32ToString(storeLogData.TotalCount()) // 日志总量件数
|
||||
|
||||
@ -275,8 +276,19 @@ func findSame(currentDocId uint32, forward bool, minDocumentId uint32, maxDocume
|
||||
}
|
||||
// 找到则加入结果
|
||||
if flg {
|
||||
rsCnt++
|
||||
rs.Data = append(rs.Data, storeLogData.GetLogDataModel(docId))
|
||||
md := storeLogData.GetLogDataModel(docId)
|
||||
if len(loglevels) > 0 {
|
||||
// 多选条件时做匹配判断
|
||||
if cmn.ContainsIngoreCase(allloglevels, md.LogLevel) {
|
||||
rsCnt++
|
||||
rs.Data = append(rs.Data, md)
|
||||
}
|
||||
} else {
|
||||
// 单选或全选时找到的都是匹配的
|
||||
rsCnt++
|
||||
rs.Data = append(rs.Data, md)
|
||||
}
|
||||
|
||||
if rsCnt >= conf.GetPageSize() {
|
||||
break // 最多找一页
|
||||
}
|
||||
@ -288,7 +300,7 @@ func findSame(currentDocId uint32, forward bool, minDocumentId uint32, maxDocume
|
||||
tmpMinPos-- // 当前最短索引可能不变,得正常减1,若变化则会被覆盖没有关系
|
||||
}
|
||||
} else {
|
||||
// 有相对文档ID且是前一页方向
|
||||
// 有相对文档ID且是前一页方向(注:暂未使用,未经测试)
|
||||
pos++
|
||||
var ary []*logdata.LogDataModel
|
||||
for i := pos; i <= totalCount; i++ {
|
||||
|
||||
@ -22,17 +22,23 @@ func LogSearchController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
datetimeFrom := req.GetFormParameter("datetimeFrom")
|
||||
datetimeTo := req.GetFormParameter("datetimeTo")
|
||||
system := req.GetFormParameter("system")
|
||||
loglevel := req.GetFormParameter("loglevel")
|
||||
loglevel := req.GetFormParameter("loglevel") // 单选条件
|
||||
loglevels := cmn.Split(loglevel, ",") // 多选条件
|
||||
if len(loglevels) <= 1 || len(loglevels) >= 4 {
|
||||
loglevels = make([]string, 0) // 多选的单选或全选,都清空(单选走loglevel索引,全选等于没选)
|
||||
}
|
||||
|
||||
if !cmn.IsBlank(system) {
|
||||
system = "~" + cmn.Trim(system)
|
||||
}
|
||||
if !cmn.IsBlank(loglevel) {
|
||||
loglevel = "!" + cmn.Trim(loglevel)
|
||||
if !cmn.IsBlank(loglevel) && len(loglevels) == 0 {
|
||||
loglevel = "!" + cmn.Trim(loglevel) // 单个条件时作为索引条件
|
||||
} else {
|
||||
loglevel = "" // 多选条件时不使用,改用loglevels
|
||||
}
|
||||
|
||||
eng := ldb.NewEngine(storeName)
|
||||
rs := eng.Search(searchKey, system, datetimeFrom, datetimeTo, loglevel, currentId, forward)
|
||||
rs := eng.Search(searchKey, system, datetimeFrom, datetimeTo, loglevel, loglevels, currentId, forward)
|
||||
|
||||
// 检索结果后处理
|
||||
rs.PageSize = cmn.IntToString(conf.GetPageSize())
|
||||
|
||||
@ -17,8 +17,8 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="日志级别">
|
||||
<el-select v-model="formData.loglevel" :multiple="false" clearable :reserve-keyword="true"
|
||||
style="width:420px;" placeholder="请选择...">
|
||||
<el-select v-model="formData.loglevel" multiple clearable :reserve-keyword="true" style="width:420px;"
|
||||
placeholder="请选择...">
|
||||
<el-option label="ERROR" value="error" />
|
||||
<el-option label="WARN" value="warn" />
|
||||
<el-option label="INFO" value="info" />
|
||||
@ -205,7 +205,7 @@ function search() {
|
||||
data.searchKey = formData.value.searchKeys;
|
||||
data.storeName = formData.value.storage;
|
||||
data.system = formData.value.system;
|
||||
data.loglevel = formData.value.loglevel;
|
||||
data.loglevel = formData.value.loglevel.join(',');
|
||||
data.datetimeFrom = (formData.value.datetime || ['', ''])[0];
|
||||
data.datetimeTo = (formData.value.datetime || ['', ''])[1];
|
||||
|
||||
@ -251,7 +251,7 @@ function searchMore() {
|
||||
data.searchKey = formData.value.searchKeys;
|
||||
data.storeName = formData.value.storage;
|
||||
data.system = formData.value.system;
|
||||
data.loglevel = formData.value.loglevel;
|
||||
data.loglevel = formData.value.loglevel.join(',');
|
||||
data.datetimeFrom = (formData.value.datetime || ['', ''])[0];
|
||||
data.datetimeTo = (formData.value.datetime || ['', ''])[1];
|
||||
data.forward = true
|
||||
|
||||
Loading…
Reference in New Issue
Block a user