1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-22 13:10:54 +00:00

Logs support file & filenum

This commit is contained in:
asta.xie 2014-03-25 23:48:18 +08:00
parent c7f16b5d5a
commit 3f5fee2dc6
3 changed files with 37 additions and 5 deletions

View File

@ -60,6 +60,7 @@ var (
AdminHttpPort int AdminHttpPort int
FlashName string // name of the flash variable found in response header and cookie FlashName string // name of the flash variable found in response header and cookie
FlashSeperator string // used to seperate flash key:value FlashSeperator string // used to seperate flash key:value
EnableLogFuncCallDepth bool // enable the funcCallDeppth
) )
func init() { func init() {
@ -133,6 +134,10 @@ func init() {
// init BeeLogger // init BeeLogger
BeeLogger = logs.NewLogger(10000) BeeLogger = logs.NewLogger(10000)
BeeLogger.SetLogger("console", "") BeeLogger.SetLogger("console", "")
if EnableLogFuncCallDepth {
BeeLogger.EnableFuncCallDepth(true)
BeeLogger.SetLogFuncCallDepth(3)
}
err := ParseConfig() err := ParseConfig()
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {

View File

@ -6,6 +6,7 @@ import (
func TestConsole(t *testing.T) { func TestConsole(t *testing.T) {
log := NewLogger(10000) log := NewLogger(10000)
log.EnableFuncCallDepth(true)
log.SetLogger("console", "") log.SetLogger("console", "")
log.Trace("trace") log.Trace("trace")
log.Info("info") log.Info("info")
@ -23,6 +24,7 @@ func TestConsole(t *testing.T) {
func BenchmarkConsole(b *testing.B) { func BenchmarkConsole(b *testing.B) {
log := NewLogger(10000) log := NewLogger(10000)
log.EnableFuncCallDepth(true)
log.SetLogger("console", "") log.SetLogger("console", "")
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
log.Trace("trace") log.Trace("trace")

View File

@ -2,6 +2,8 @@ package logs
import ( import (
"fmt" "fmt"
"path"
"runtime"
"sync" "sync"
) )
@ -43,10 +45,12 @@ func Register(name string, log loggerType) {
// BeeLogger is default logger in beego application. // BeeLogger is default logger in beego application.
// it can contain several providers and log message into all providers. // it can contain several providers and log message into all providers.
type BeeLogger struct { type BeeLogger struct {
lock sync.Mutex lock sync.Mutex
level int level int
msg chan *logMsg enableFuncCallDepth bool
outputs map[string]LoggerInterface loggerFuncCallDepth int
msg chan *logMsg
outputs map[string]LoggerInterface
} }
type logMsg struct { type logMsg struct {
@ -59,6 +63,7 @@ type logMsg struct {
// if the buffering chan is full, logger adapters write to file or other way. // if the buffering chan is full, logger adapters write to file or other way.
func NewLogger(channellen int64) *BeeLogger { func NewLogger(channellen int64) *BeeLogger {
bl := new(BeeLogger) bl := new(BeeLogger)
bl.loggerFuncCallDepth = 2
bl.msg = make(chan *logMsg, channellen) bl.msg = make(chan *logMsg, channellen)
bl.outputs = make(map[string]LoggerInterface) bl.outputs = make(map[string]LoggerInterface)
//bl.SetLogger("console", "") // default output to console //bl.SetLogger("console", "") // default output to console
@ -100,7 +105,17 @@ func (bl *BeeLogger) writerMsg(loglevel int, msg string) error {
} }
lm := new(logMsg) lm := new(logMsg)
lm.level = loglevel lm.level = loglevel
lm.msg = msg if bl.enableFuncCallDepth {
_, file, line, ok := runtime.Caller(bl.loggerFuncCallDepth)
if ok {
_, filename := path.Split(file)
lm.msg = fmt.Sprintf("[%s:%d] %s", filename, line, msg)
} else {
lm.msg = msg
}
} else {
lm.msg = msg
}
bl.msg <- lm bl.msg <- lm
return nil return nil
} }
@ -111,6 +126,16 @@ func (bl *BeeLogger) SetLevel(l int) {
bl.level = l bl.level = l
} }
// set log funcCallDepth
func (bl *BeeLogger) SetLogFuncCallDepth(d int) {
bl.loggerFuncCallDepth = d
}
// enable log funcCallDepth
func (bl *BeeLogger) EnableFuncCallDepth(b bool) {
bl.enableFuncCallDepth = b
}
// start logger chan reading. // start logger chan reading.
// when chan is full, write logs. // when chan is full, write logs.
func (bl *BeeLogger) StartLogger() { func (bl *BeeLogger) StartLogger() {