You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
872 B
48 lines
872 B
9 years ago
|
package mgorus
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/Sirupsen/logrus"
|
||
|
"gopkg.in/mgo.v2"
|
||
|
"gopkg.in/mgo.v2/bson"
|
||
|
)
|
||
|
|
||
|
type hooker struct {
|
||
|
c *mgo.Collection
|
||
|
}
|
||
|
|
||
|
type M bson.M
|
||
|
|
||
|
func NewHooker(mgoUrl, db, collection string) (*hooker, error) {
|
||
|
session, err := mgo.Dial(mgoUrl)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &hooker{c: session.DB(db).C(collection)}, nil
|
||
|
}
|
||
|
|
||
|
func (h *hooker) Fire(entry *logrus.Entry) error {
|
||
|
entry.Data["Level"] = entry.Level.String()
|
||
|
entry.Data["Time"] = entry.Time
|
||
|
entry.Data["Message"] = entry.Message
|
||
|
mgoErr := h.c.Insert(M(entry.Data))
|
||
|
if mgoErr != nil {
|
||
|
return fmt.Errorf("Failed to send log entry to mongodb: %s", mgoErr)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (h *hooker) Levels() []logrus.Level {
|
||
|
return []logrus.Level{
|
||
|
logrus.PanicLevel,
|
||
|
logrus.FatalLevel,
|
||
|
logrus.ErrorLevel,
|
||
|
logrus.WarnLevel,
|
||
|
logrus.InfoLevel,
|
||
|
logrus.DebugLevel,
|
||
|
}
|
||
|
}
|