69 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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)
 | 
						|
}
 |