diff --git a/log.go b/log.go index c159b6cc..5afba8ed 100644 --- a/log.go +++ b/log.go @@ -38,6 +38,11 @@ func SetLevel(l int) { BeeLogger.SetLevel(l) } +func SetLogFuncCall(b bool) { + BeeLogger.EnableFuncCallDepth(b) + BeeLogger.SetLogFuncCallDepth(3) +} + // logger references the used application logger. var BeeLogger *logs.BeeLogger diff --git a/logs/conn.go b/logs/conn.go index e3d60eed..612634fa 100644 --- a/logs/conn.go +++ b/logs/conn.go @@ -99,7 +99,7 @@ func (c *ConnWriter) connect() error { } c.innerWriter = conn - c.lg = log.New(conn, "", log.Ldate|log.Ltime|log.Lshortfile) + c.lg = log.New(conn, "", log.Ldate|log.Ltime) return nil } diff --git a/logs/console.go b/logs/console.go index aa34be45..461291c2 100644 --- a/logs/console.go +++ b/logs/console.go @@ -51,7 +51,7 @@ type ConsoleWriter struct { // create ConsoleWriter returning as LoggerInterface. func NewConsole() LoggerInterface { cw := new(ConsoleWriter) - cw.lg = log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile) + cw.lg = log.New(os.Stdout, "", log.Ldate|log.Ltime) cw.Level = LevelDebug return cw } diff --git a/logs/file.go b/logs/file.go index 0381d1c1..39220cc0 100644 --- a/logs/file.go +++ b/logs/file.go @@ -89,7 +89,7 @@ func NewFileWriter() LoggerInterface { // use MuxWriter instead direct use os.File for lock write when rotate w.mw = new(MuxWriter) // set MuxWriter as Logger's io.Writer - w.Logger = log.New(w.mw, "", log.Ldate|log.Ltime|log.Lshortfile) + w.Logger = log.New(w.mw, "", log.Ldate|log.Ltime) return w } diff --git a/logs/log.go b/logs/log.go index 3d66429d..341df572 100644 --- a/logs/log.go +++ b/logs/log.go @@ -34,7 +34,8 @@ package logs import ( "fmt" - + "path" + "runtime" "sync" ) @@ -87,10 +88,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 { @@ -104,6 +107,7 @@ type logMsg struct { func NewLogger(channellen int64) *BeeLogger { bl := new(BeeLogger) bl.level = LevelDebug + bl.loggerFuncCallDepth = 2 bl.msg = make(chan *logMsg, channellen) bl.outputs = make(map[string]LoggerInterface) //bl.SetLogger("console", "") // default output to console @@ -149,7 +153,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 } @@ -162,6 +176,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 not empty, write logs. func (bl *BeeLogger) startLogger() {