/
runtimelog.go
180 lines (164 loc) · 4.78 KB
/
runtimelog.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
package db
import (
"fmt"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
"time"
)
type RuntimeLog struct {
Id int `gorm:"primaryKey"`
Source string `gorm:"column:source"`
File string `gorm:"column:file"`
Func string `gorm:"column:func"`
Level string `gorm:"column:level"`
LevelInt int `gorm:"level_int"`
Message string `gorm:"column:message"`
CreateDatetime time.Time `gorm:"column:create_datetime"`
UpdateDatetime time.Time `gorm:"column:update_datetime"`
}
func (*RuntimeLog) TableName() string {
return "runtimelog"
}
// Add 插入一条新的记录,返回主键ID及成功标志
func (l *RuntimeLog) Add() (success bool) {
l.CreateDatetime = time.Now()
l.UpdateDatetime = time.Now()
/*
var AllLevels = []Level{
PanicLevel,
FatalLevel,
ErrorLevel,
WarnLevel,
InfoLevel,
DebugLevel,
TraceLevel,
}
// PanicLevel level, highest level of severity. Logs and then calls panic with the
// message passed to Debug, Info, ...
PanicLevel Level = iota
// FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the
// logging level is set to Panic.
FatalLevel
// ErrorLevel level. Logs. Used for errors that should definitely be noted.
// Commonly used for hooks to send errors to an error tracking service.
ErrorLevel
// WarnLevel level. Non-critical entries that deserve eyes.
WarnLevel
// InfoLevel level. General operational entries about what's going on inside the
// application.
InfoLevel
// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
DebugLevel
// TraceLevel level. Designates finer-grained informational events than the Debug.
TraceLevel
*/
switch l.Level {
case "panic":
l.LevelInt = int(logrus.PanicLevel)
case "fatal":
l.LevelInt = int(logrus.FatalLevel)
case "error":
l.LevelInt = int(logrus.ErrorLevel)
case "warning":
l.LevelInt = int(logrus.WarnLevel)
case "info":
l.LevelInt = int(logrus.InfoLevel)
case "debug":
l.LevelInt = int(logrus.DebugLevel)
default:
l.LevelInt = 10
}
db := GetDB()
defer CloseDB(db)
if result := db.Create(l); result.RowsAffected > 0 {
return true
} else {
return false
}
}
// Get 根据Id查询记录
func (l *RuntimeLog) Get() (success bool) {
db := GetDB()
defer CloseDB(db)
if result := db.First(l, l.Id); result.RowsAffected > 0 {
return true
} else {
return false
}
}
// Delete 删除指定主键ID的一条记录
func (l *RuntimeLog) Delete() (success bool) {
db := GetDB()
defer CloseDB(db)
if result := db.Delete(l, l.Id); result.RowsAffected > 0 {
return true
} else {
return false
}
}
// DeleteLogs 批量删除指定条件的记录
func (l *RuntimeLog) DeleteLogs(searchMap map[string]interface{}) (success bool) {
db := l.makeWhere(searchMap).Model(l)
defer CloseDB(db)
if result := db.Delete(l); result.RowsAffected > 0 {
return true
} else {
return false
}
}
// Count 统计指定查询条件的记录数量
func (l *RuntimeLog) Count(searchMap map[string]interface{}) (count int) {
db := l.makeWhere(searchMap).Model(l)
defer CloseDB(db)
var result int64
db.Count(&result)
return int(result)
}
// makeWhere 根据查询条件的不同的字段,组合生成count和search的查询条件
func (l *RuntimeLog) makeWhere(searchMap map[string]interface{}) *gorm.DB {
db := GetDB()
//根据查询条件的不同的字段,组合生成查询条件
for column, value := range searchMap {
switch column {
case "source":
db = makeLike(value, column, db)
case "file":
db = makeLike(value, column, db)
case "func":
db = makeLike(value, column, db)
case "level_int":
db = db.Where("level_int <= ?", value)
case "message":
db = makeLike(value, column, db)
case "date_delta":
// 筛选指定日期之前的日志(注意:与其它查询时间之类的有所区别)
daysToHour := 24 * value.(int)
dayDelta, err := time.ParseDuration(fmt.Sprintf("-%dh", daysToHour))
if err == nil {
db = db.Where("update_datetime < ?", time.Now().Add(dayDelta))
}
default:
db = db.Where(column, value)
}
}
return db
}
// Gets 根据指定的条件,查询满足要求的记录
func (l *RuntimeLog) Gets(searchMap map[string]interface{}, page, rowsPerPage int) (results []RuntimeLog, count int) {
orderBy := "update_datetime desc"
db := l.makeWhere(searchMap).Model(l)
defer CloseDB(db)
//统计满足条件的总记录数
var total int64
db.Count(&total)
//获取分页查询结果
if rowsPerPage > 0 && page > 0 {
db = db.Offset((page - 1) * rowsPerPage).Limit(rowsPerPage)
}
db.Order(orderBy).Find(&results)
return results, int(total)
}
// SaveOrUpdate 保存、更新一条记录
func (l *RuntimeLog) SaveOrUpdate() (success bool, isAdd bool) {
return l.Add(), true
}