mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 07:40:54 +00:00
Logs support file & filenum
This commit is contained in:
parent
c7f16b5d5a
commit
3f5fee2dc6
@ -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) {
|
||||||
|
@ -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")
|
||||||
|
35
logs/log.go
35
logs/log.go
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user