52 lines
1 KiB
Go
52 lines
1 KiB
Go
|
package entity
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/photoprism/photoprism/internal/event"
|
||
|
"github.com/sirupsen/logrus"
|
||
|
)
|
||
|
|
||
|
// Error represents an error message log.
|
||
|
type Error struct {
|
||
|
ID uint `gorm:"primary_key"`
|
||
|
ErrorTime time.Time `sql:"index"`
|
||
|
ErrorLevel string `gorm:"type:varbinary(32)"`
|
||
|
ErrorMessage string `gorm:"type:varbinary(2048)"`
|
||
|
}
|
||
|
|
||
|
// SaveErrorMessages subscribes to error logs and stored them in the errors table.
|
||
|
func SaveErrorMessages() {
|
||
|
s := event.Subscribe("log.*")
|
||
|
|
||
|
defer func() {
|
||
|
event.Unsubscribe(s)
|
||
|
}()
|
||
|
|
||
|
for msg := range s.Receiver {
|
||
|
level, ok := msg.Fields["level"]
|
||
|
|
||
|
if !ok {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
logLevel, err := logrus.ParseLevel(level.(string))
|
||
|
|
||
|
if err != nil || logLevel >= logrus.InfoLevel {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
newError := Error{ErrorLevel: logLevel.String()}
|
||
|
|
||
|
if val, ok := msg.Fields["msg"]; ok {
|
||
|
newError.ErrorMessage = val.(string)
|
||
|
}
|
||
|
|
||
|
if val, ok := msg.Fields["time"]; ok {
|
||
|
newError.ErrorTime = val.(time.Time)
|
||
|
}
|
||
|
|
||
|
Db().Create(&newError)
|
||
|
}
|
||
|
}
|