From 3f5fee2dc627c1376614562c551cb3d447bf1fb9 Mon Sep 17 00:00:00 2001 From: "asta.xie" Date: Tue, 25 Mar 2014 23:48:18 +0800 Subject: [PATCH] Logs support file & filenum --- config.go | 5 +++++ logs/console_test.go | 2 ++ logs/log.go | 35 ++++++++++++++++++++++++++++++----- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/config.go b/config.go index 54de325c..a054a736 100644 --- a/config.go +++ b/config.go @@ -60,6 +60,7 @@ var ( AdminHttpPort int FlashName string // name of the flash variable found in response header and cookie FlashSeperator string // used to seperate flash key:value + EnableLogFuncCallDepth bool // enable the funcCallDeppth ) func init() { @@ -133,6 +134,10 @@ func init() { // init BeeLogger BeeLogger = logs.NewLogger(10000) BeeLogger.SetLogger("console", "") + if EnableLogFuncCallDepth { + BeeLogger.EnableFuncCallDepth(true) + BeeLogger.SetLogFuncCallDepth(3) + } err := ParseConfig() if err != nil && !os.IsNotExist(err) { diff --git a/logs/console_test.go b/logs/console_test.go index f177e919..041927ca 100644 --- a/logs/console_test.go +++ b/logs/console_test.go @@ -6,6 +6,7 @@ import ( func TestConsole(t *testing.T) { log := NewLogger(10000) + log.EnableFuncCallDepth(true) log.SetLogger("console", "") log.Trace("trace") log.Info("info") @@ -23,6 +24,7 @@ func TestConsole(t *testing.T) { func BenchmarkConsole(b *testing.B) { log := NewLogger(10000) + log.EnableFuncCallDepth(true) log.SetLogger("console", "") for i := 0; i < b.N; i++ { log.Trace("trace") diff --git a/logs/log.go b/logs/log.go index b65414cb..67eb1c79 100644 --- a/logs/log.go +++ b/logs/log.go @@ -2,6 +2,8 @@ package logs import ( "fmt" + "path" + "runtime" "sync" ) @@ -43,10 +45,12 @@ func Register(name string, log loggerType) { // BeeLogger is default logger in beego application. // it can contain several providers and log message into all providers. type BeeLogger struct { - lock sync.Mutex - level int - msg chan *logMsg - outputs map[string]LoggerInterface + lock sync.Mutex + level int + enableFuncCallDepth bool + loggerFuncCallDepth int + msg chan *logMsg + outputs map[string]LoggerInterface } type logMsg struct { @@ -59,6 +63,7 @@ type logMsg struct { // if the buffering chan is full, logger adapters write to file or other way. func NewLogger(channellen int64) *BeeLogger { bl := new(BeeLogger) + bl.loggerFuncCallDepth = 2 bl.msg = make(chan *logMsg, channellen) bl.outputs = make(map[string]LoggerInterface) //bl.SetLogger("console", "") // default output to console @@ -100,7 +105,17 @@ func (bl *BeeLogger) writerMsg(loglevel int, msg string) error { } lm := new(logMsg) 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 return nil } @@ -111,6 +126,16 @@ func (bl *BeeLogger) SetLevel(l int) { 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. // when chan is full, write logs. func (bl *BeeLogger) StartLogger() {