Logs support file & filenum
This commit is contained in:
		
							parent
							
								
									c7f16b5d5a
								
							
						
					
					
						commit
						3f5fee2dc6
					
				| @ -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) { | ||||
|  | ||||
| @ -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") | ||||
|  | ||||
							
								
								
									
										25
									
								
								logs/log.go
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								logs/log.go
									
									
									
									
									
								
							| @ -2,6 +2,8 @@ package logs | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"path" | ||||
| 	"runtime" | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| @ -45,6 +47,8 @@ func Register(name string, log loggerType) { | ||||
| type BeeLogger struct { | ||||
| 	lock                sync.Mutex | ||||
| 	level               int | ||||
| 	enableFuncCallDepth bool | ||||
| 	loggerFuncCallDepth int | ||||
| 	msg                 chan *logMsg | ||||
| 	outputs             map[string]LoggerInterface | ||||
| } | ||||
| @ -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 | ||||
| 	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() { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user