// Copyright 2014 The Gogs Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package log import ( "encoding/json" "github.com/go-xorm/xorm" ) type Log struct { Id int64 Level int Msg string `xorm:"TEXT"` } // DatabaseWriter implements LoggerInterface and is used to log into database. type DatabaseWriter struct { Driver string `json:"driver"` Conn string `json:"conn"` Level int `json:"level"` x *xorm.Engine } func NewDatabase() LoggerInterface { return &DatabaseWriter{Level: TRACE} } // init database writer with json config. // config like: // { // "driver": "mysql" // "conn":"root:root@tcp(127.0.0.1:3306)/gogs?charset=utf8", // "level": 0 // } // connection string is based on xorm. func (d *DatabaseWriter) Init(jsonconfig string) (err error) { if err = json.Unmarshal([]byte(jsonconfig), d); err != nil { return err } d.x, err = xorm.NewEngine(d.Driver, d.Conn) if err != nil { return err } return d.x.Sync(new(Log)) } // write message in database writer. func (d *DatabaseWriter) WriteMsg(msg string, skip, level int) error { if level < d.Level { return nil } _, err := d.x.Insert(&Log{Level: level, Msg: msg}) return err } func (_ *DatabaseWriter) Flush() { } func (_ *DatabaseWriter) Destroy() { } func init() { Register("database", NewDatabase) }