From 492323c5b1a5f4d11111c13c5fbc4263ce67effd Mon Sep 17 00:00:00 2001 From: John Date: Thu, 30 Aug 2018 13:00:49 +0800 Subject: [PATCH] =?UTF-8?q?glog=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=AD=89=E7=BA=A7=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/container/gset/gset.go | 7 +++ g/os/glog/glog.go | 12 ++++- g/os/glog/glog_logger.go | 96 ++++++++++++++++++++++++++-------------- 3 files changed, 82 insertions(+), 33 deletions(-) diff --git a/g/container/gset/gset.go b/g/container/gset/gset.go index b1951bdeb..f48357f1c 100644 --- a/g/container/gset/gset.go +++ b/g/container/gset/gset.go @@ -6,3 +6,10 @@ // 并发安全的集合SET. package gset + +type Set = InterfaceSet + +// 默认Set类型 +func New() *Set { + return NewInterfaceSet() +} \ No newline at end of file diff --git a/g/os/glog/glog.go b/g/os/glog/glog.go index 1c9cbe30e..082b548bf 100644 --- a/g/os/glog/glog.go +++ b/g/os/glog/glog.go @@ -19,12 +19,22 @@ type Logger struct { pr *Logger // 父级Logger io io.Writer // 日志内容写入的IO接口 path *gtype.String // 日志写入的目录路径 - debug *gtype.Bool // 是否允许输出DEBUG信息 + level *gtype.Int // 日志输出等级 btSkip *gtype.Int // 错误产生时的backtrace回调信息skip条数 btEnabled *gtype.Bool // 是否当打印错误时同时开启backtrace打印 alsoStdPrint *gtype.Bool // 控制台打印开关,当输出到文件/自定义输出时也同时打印到终端 } +const ( + LEVEL_ALL = LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT + LEVEL_DEBU = 1 << iota + LEVEL_INFO + LEVEL_NOTI + LEVEL_WARN + LEVEL_ERRO + LEVEL_CRIT +) + var ( // 默认的日志对象 logger = New() diff --git a/g/os/glog/glog_logger.go b/g/os/glog/glog_logger.go index cd21bf0a2..d3e58936e 100644 --- a/g/os/glog/glog_logger.go +++ b/g/os/glog/glog_logger.go @@ -31,21 +31,18 @@ const ( var ln = "\n" // 初始化日志换行符 -// @author zseeker -// @date 2018-05-23 func init() { if runtime.GOOS == "windows" { ln = "\r\n" } } - // 新建自定义的日志操作对象 func New() *Logger { return &Logger { io : nil, path : gtype.NewString(), - debug : gtype.NewBool(true), + level : gtype.NewInt(LEVEL_ALL), btSkip : gtype.NewInt(), btEnabled : gtype.NewBool(true), alsoStdPrint : gtype.NewBool(true), @@ -58,13 +55,27 @@ func (l *Logger) Clone() *Logger { pr : l, io : l.GetIO(), path : l.path.Clone(), - debug : l.debug.Clone(), + level : l.level.Clone(), btSkip : l.btSkip.Clone(), btEnabled : l.btEnabled.Clone(), alsoStdPrint : l.alsoStdPrint.Clone(), } } +// 设置日志记录等级 +func (l *Logger) SetLevel(level int) { + l.level.Set(level) +} + +// 快捷方法,打开或关闭DEBU日志信息 +func (l *Logger) SetDebug(debug bool) { + l.level.Set(l.level.Val()|LEVEL_DEBU) +} + +func (l *Logger) SetBacktrace(enabled bool) { + l.btEnabled.Set(enabled) +} + // 设置BacktraceSkip func (l *Logger) SetBacktraceSkip(skip int) { l.btSkip.Set(skip) @@ -98,18 +109,6 @@ func (l *Logger) getFileByPool() *gfilepool.File { return nil } -func (l *Logger) GetDebug() bool { - return l.debug.Val() -} - -func (l *Logger) SetBacktrace(enabled bool) { - l.btEnabled.Set(enabled) -} - -func (l *Logger) SetDebug(debug bool) { - l.debug.Set(debug) -} - // 设置日志文件的存储目录路径 func (l *Logger) SetPath(path string) error { // 检测目录权限 @@ -129,8 +128,6 @@ func (l *Logger) SetPath(path string) error { } // 设置写日志时开启or关闭控制台打印,默认是关闭的 -// @author zseeker -// @date 2018-05-24 func (l *Logger) SetStdPrint(enabled bool) { l.alsoStdPrint.Set(enabled) } @@ -273,79 +270,114 @@ func (l *Logger) Panicfln(format string, v ...interface{}) { } func (l *Logger) Info(v ...interface{}) { - l.stdPrint("[INFO] " + fmt.Sprint(v...) + ln) + if l.level.Val() & LEVEL_INFO > 0 { + l.stdPrint("[INFO] " + fmt.Sprint(v...) + ln) + } } func (l *Logger) Debug(v ...interface{}) { - if l.GetDebug() { + if l.level.Val() & LEVEL_DEBU > 0 { l.stdPrint("[DEBU] " + fmt.Sprint(v...) + ln) } } func (l *Logger) Notice(v ...interface{}) { + if l.level.Val() & LEVEL_NOTI > 0 { + + } l.errPrint("[NOTI] " + fmt.Sprint(v...) + ln) } func (l *Logger) Warning(v ...interface{}) { + if l.level.Val() & LEVEL_INFO > 0 { + + } l.errPrint("[WARN] " + fmt.Sprint(v...) + ln) } func (l *Logger) Error(v ...interface{}) { + if l.level.Val() & LEVEL_INFO > 0 { + + } l.errPrint("[ERRO] " + fmt.Sprint(v...) + ln) } func (l *Logger) Critical(v ...interface{}) { + if l.level.Val() & LEVEL_INFO > 0 { + + } l.errPrint("[CRIT] " + fmt.Sprint(v...) + ln) } func (l *Logger) Infof(format string, v ...interface{}) { + if l.level.Val() & LEVEL_INFO > 0 { + + } l.stdPrint("[INFO] " + fmt.Sprintf(format, v...)) } func (l *Logger) Debugf(format string, v ...interface{}) { - if l.GetDebug() { + if l.level.Val() & LEVEL_INFO > 0 { l.stdPrint("[DEBU] " + fmt.Sprintf(format, v...)) } } func (l *Logger) Noticef(format string, v ...interface{}) { - l.errPrint("[NOTI] " + fmt.Sprintf(format, v...)) + if l.level.Val() & LEVEL_NOTI > 0 { + l.errPrint("[NOTI] " + fmt.Sprintf(format, v...)) + } } func (l *Logger) Warningf(format string, v ...interface{}) { - l.errPrint("[WARN] " + fmt.Sprintf(format, v...)) + if l.level.Val() & LEVEL_WARN > 0 { + l.errPrint("[WARN] " + fmt.Sprintf(format, v...)) + } } func (l *Logger) Errorf(format string, v ...interface{}) { - l.errPrint("[ERRO] " + fmt.Sprintf(format, v...)) + if l.level.Val() & LEVEL_ERRO > 0 { + l.errPrint("[ERRO] " + fmt.Sprintf(format, v...)) + } } func (l *Logger) Criticalf(format string, v ...interface{}) { - l.errPrint("[CRIT] " + fmt.Sprintf(format, v...)) + if l.level.Val() & LEVEL_CRIT > 0 { + l.errPrint("[CRIT] " + fmt.Sprintf(format, v...)) + } } func (l *Logger) Infofln(format string, v ...interface{}) { - l.stdPrint("[INFO] " + fmt.Sprintf(format, v...) + ln) + if l.level.Val() & LEVEL_INFO > 0 { + l.stdPrint("[INFO] " + fmt.Sprintf(format, v...) + ln) + } } func (l *Logger) Debugfln(format string, v ...interface{}) { - if l.GetDebug() { + if l.level.Val() & LEVEL_DEBU > 0 { l.stdPrint("[DEBU] " + fmt.Sprintf(format, v...) + ln) } } func (l *Logger) Noticefln(format string, v ...interface{}) { - l.errPrint("[NOTI] " + fmt.Sprintf(format, v...) + ln) + if l.level.Val() & LEVEL_NOTI > 0 { + l.errPrint("[NOTI] " + fmt.Sprintf(format, v...) + ln) + } } func (l *Logger) Warningfln(format string, v ...interface{}) { - l.errPrint("[WARN] " + fmt.Sprintf(format, v...) + ln) + if l.level.Val() & LEVEL_WARN > 0 { + l.errPrint("[WARN] " + fmt.Sprintf(format, v...) + ln) + } } func (l *Logger) Errorfln(format string, v ...interface{}) { - l.errPrint("[ERRO] " + fmt.Sprintf(format, v...) + ln) + if l.level.Val() & LEVEL_ERRO > 0 { + l.errPrint("[ERRO] " + fmt.Sprintf(format, v...) + ln) + } } func (l *Logger) Criticalfln(format string, v ...interface{}) { - l.errPrint("[CRIT] " + fmt.Sprintf(format, v...) + ln) + if l.level.Val() & LEVEL_CRIT > 0 { + l.errPrint("[CRIT] " + fmt.Sprintf(format, v...) + ln) + } } \ No newline at end of file