Browse Source

修正StdZinxLogger对象打印日志函数名层级不对问题

master
aceld 5 years ago
parent
commit
dd08147c26
  1. 5
      zlog/stdzlog.go
  2. 7
      zlog/zlogger.go

5
zlog/stdzlog.go

@ -103,3 +103,8 @@ func Stack(v ...interface{}) {
StdZinxLog.Stack(v...)
}
func init() {
//因为StdZinxLog对象 对所有输出方法做了一层包裹,所以在打印调用函数的时候,比正常的logger对象多一层调用
//一般的zinxLogger对象 calldDepth=2, StdZinxLog的calldDepth=3
StdZinxLog.calldDepth = 3
}

7
zlog/zlogger.go

@ -67,6 +67,8 @@ type ZinxLogger struct {
file *os.File
//是否打印调试debug信息
debugClose bool
//获取日志文件名和代码上述的runtime.Call 的函数调用层数
calldDepth int
}
/*
@ -77,7 +79,8 @@ type ZinxLogger struct {
*/
func NewZinxLog(out io.Writer, prefix string, flag int) *ZinxLogger {
zlog := &ZinxLogger{out: out, prefix: prefix, flag: flag, file:nil, debugClose:false}
//默认 debug打开, calledDepth深度为2,ZinxLogger对象调用日志打印方法最多调用两层到达output函数
zlog := &ZinxLogger{out: out, prefix: prefix, flag: flag, file:nil, debugClose:false, calldDepth:2}
//设置log对象 回收资源 析构方法(不设置也可以,go的Gc会自动回收,强迫症没办法)
runtime.SetFinalizer(zlog, CleanZinxLog)
return zlog
@ -173,7 +176,7 @@ func (log *ZinxLogger) OutPut(level int, s string) error {
log.mu.Unlock()
var ok bool
//得到当前调用者的文件名称和执行到的代码行数
_, file, line, ok = runtime.Caller(2)
_, file, line, ok = runtime.Caller(log.calldDepth)
if !ok {
file = "unknown-file"
line = 0

Loading…
Cancel
Save