mirror of
https://github.com/simon987/task_tracker.git
synced 2025-04-10 05:56:42 +00:00
97 lines
1.8 KiB
Go
97 lines
1.8 KiB
Go
package storage
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/simon987/task_tracker/config"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type LogEntry struct {
|
|
Message string `json:"message"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
Data string `json:"data"`
|
|
Level LogLevel `json:"level"`
|
|
}
|
|
|
|
type LogLevel int
|
|
|
|
const (
|
|
FATAL LogLevel = 1
|
|
PANIC LogLevel = 2
|
|
ERROR LogLevel = 3
|
|
WARN LogLevel = 4
|
|
INFO LogLevel = 5
|
|
DEBUG LogLevel = 6
|
|
TRACE LogLevel = 7
|
|
)
|
|
|
|
type sqlLogHook struct {
|
|
database *Database
|
|
}
|
|
|
|
func (h sqlLogHook) Levels() []logrus.Level {
|
|
return config.Cfg.DbLogLevels
|
|
}
|
|
|
|
func (h sqlLogHook) Fire(entry *logrus.Entry) error {
|
|
|
|
db := h.database.getDB()
|
|
|
|
jsonData, err := json.Marshal(entry.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var logLevel LogLevel
|
|
|
|
switch entry.Level {
|
|
case logrus.TraceLevel:
|
|
logLevel = TRACE
|
|
case logrus.DebugLevel:
|
|
logLevel = DEBUG
|
|
case logrus.InfoLevel:
|
|
logLevel = INFO
|
|
case logrus.WarnLevel:
|
|
logLevel = WARN
|
|
case logrus.ErrorLevel:
|
|
logLevel = ERROR
|
|
case logrus.FatalLevel:
|
|
logLevel = FATAL
|
|
case logrus.PanicLevel:
|
|
logLevel = PANIC
|
|
}
|
|
|
|
_, err = db.Exec("INSERT INTO log_entry (message, level, message_data, timestamp) VALUES ($1,$2,$3,$4)",
|
|
entry.Message, logLevel, jsonData, entry.Time.Unix())
|
|
return err
|
|
}
|
|
|
|
func (database *Database) SetupLoggerHook() {
|
|
hook := sqlLogHook{}
|
|
hook.database = database
|
|
logrus.AddHook(hook)
|
|
}
|
|
|
|
func (database *Database) GetLogs(since int64, level LogLevel) *[]LogEntry {
|
|
|
|
db := database.getDB()
|
|
|
|
var logs []LogEntry
|
|
|
|
rows, err := db.Query("SELECT * FROM log_entry WHERE timestamp > $1 AND level=$2",
|
|
since, level)
|
|
handleErr(err)
|
|
|
|
for rows.Next() {
|
|
|
|
e := LogEntry{}
|
|
|
|
err := rows.Scan(&e.Level, &e.Message, &e.Data, &e.Timestamp)
|
|
handleErr(err)
|
|
|
|
logs = append(logs, e)
|
|
}
|
|
|
|
return &logs
|
|
}
|