From c92c3fc8b512b1a9ae6107a6351ba076d5acdba5 Mon Sep 17 00:00:00 2001 From: JessonChan Date: Fri, 11 Mar 2016 14:45:39 +0800 Subject: [PATCH] make the BeegoLogger a adapter of http server ErrorLog --- app.go | 2 ++ logs/log.go | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app.go b/app.go index af54ea4b..a065670a 100644 --- a/app.go +++ b/app.go @@ -16,6 +16,7 @@ package beego import ( "fmt" + "log" "net" "net/http" "net/http/fcgi" @@ -95,6 +96,7 @@ func (app *App) Run() { app.Server.Handler = app.Handlers app.Server.ReadTimeout = time.Duration(BConfig.Listen.ServerTimeOut) * time.Second app.Server.WriteTimeout = time.Duration(BConfig.Listen.ServerTimeOut) * time.Second + app.Server.ErrorLog = log.New(BeeLogger, "", 0) // run graceful mode if BConfig.Listen.Graceful { diff --git a/logs/log.go b/logs/log.go index a5982e45..583b35e0 100644 --- a/logs/log.go +++ b/logs/log.go @@ -196,6 +196,22 @@ func (bl *BeeLogger) writeToLoggers(when time.Time, msg string, level int) { } } +func (bl *BeeLogger) Write(p []byte) (n int, err error) { + if len(p) == 0 { + return 0, nil + } + // writeMsg will always add a '\n' character + if p[len(p)-1] == '\n' { + p = p[0 : len(p)-1] + } + // set LevelCritical to ensure all log message will be write out + err = bl.writeMsg(LevelCritical, string(p)) + if err == nil { + return len(p), err + } + return 0, err +} + func (bl *BeeLogger) writeMsg(logLevel int, msg string) error { when := time.Now() if bl.enableFuncCallDepth { @@ -205,7 +221,7 @@ func (bl *BeeLogger) writeMsg(logLevel int, msg string) error { line = 0 } _, filename := path.Split(file) - msg = "[" + filename + ":" + strconv.FormatInt(int64(line), 10) + "]" + msg + msg = "[" + filename + ":" + strconv.FormatInt(int64(line), 10) + "] " + msg } if bl.asynchronous { lm := logMsgPool.Get().(*logMsg)