From 9a6b692ca51e5c77cfc0ac90b8108f47d5fbf60a Mon Sep 17 00:00:00 2001 From: zseeker <675211118@qq.com> Date: Wed, 23 May 2018 15:36:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9Eglog=E5=AF=B9=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=8D=A2=E8=A1=8C=E7=AC=A6=E7=9A=84=E8=87=AA=E9=80=82?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/glog/glog.go | 9 ++++++ g/os/glog/glog_logger.go | 63 +++++++++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/g/os/glog/glog.go b/g/os/glog/glog.go index 00f825d81..661142d34 100644 --- a/g/os/glog/glog.go +++ b/g/os/glog/glog.go @@ -20,6 +20,7 @@ type Logger struct { path *gtype.String // 日志写入的目录路径 debug *gtype.Bool // 是否允许输出DEBUG信息 btSkip *gtype.Int // 错误产生时的backtrace回调信息skip条数 + ln string // 日志换行符,window是\r\n,linux是\n } // 默认的日志对象 @@ -32,9 +33,17 @@ func New() *Logger { path : gtype.NewString(), debug : gtype.NewBool(true), btSkip : gtype.NewInt(3), + ln : "\n", } } +// 获取默认的日志对象 +// @author zseeker +// @date 2018-05-23 +func GetLogger() *Logger { + return logger +} + // 日志日志目录绝对路径 func SetPath(path string) { logger.SetPath(path) diff --git a/g/os/glog/glog_logger.go b/g/os/glog/glog_logger.go index adcd81f8f..d017bbb48 100644 --- a/g/os/glog/glog_logger.go +++ b/g/os/glog/glog_logger.go @@ -80,6 +80,16 @@ func (l *Logger) SetPath(path string) error { return errors.New(errstr) } l.path.Set(strings.TrimRight(path, gfile.Separator)) + + // 添加日志换行符适配,window是\r\n,linux是\n + // @author zseeker + // @date 2018-05-23 + if runtime.GOOS == "windows" { + l.ln = "\r\n" + } else { + l.ln = "\n" + } + return nil } @@ -88,7 +98,14 @@ func (l *Logger) print(defaultIO io.Writer, s string) { w := l.GetIO() if w == nil { if v := l.getFileByPool(); v != nil { - w = v.File() + // 同时输出到文件和终端 + // @author zseeker + // @date 2018-05-23 + ws := []io.Writer { + v.File(), + os.Stdout, + } + w = io.MultiWriter(ws...) defer v.Close() } else { w = defaultIO @@ -109,22 +126,22 @@ func (l *Logger) errPrint(s string) { // 记录调用回溯信息 backtrace := l.backtrace() if s[len(s) - 1] == byte('\n') { - s = s + backtrace + "\n" + s = s + backtrace + l.ln } else { - s = s + "\n" + backtrace + "\n" + s = s + l.ln + backtrace + l.ln } l.print(os.Stderr, s) } // 调用回溯字符串 func (l *Logger) backtrace() string { - backtrace := "Trace:\n" + backtrace := "Trace:" + l.ln index := 1 for i := 1; i < 10000; i++ { if _, cfile, cline, ok := runtime.Caller(i + l.btSkip.Val()); ok { // 不打印出go源码路径 if !gregx.IsMatchString("^" + runtime.GOROOT(), cfile) { - backtrace += strconv.Itoa(index) + ". " + cfile + ":" + strconv.Itoa(cline) + "\n" + backtrace += strconv.Itoa(index) + ". " + cfile + ":" + strconv.Itoa(cline) + l.ln index++ } } else { @@ -147,11 +164,11 @@ func (l *Logger) Printf(format string, v ...interface{}) { } func (l *Logger) Println(v ...interface{}) { - l.stdPrint(fmt.Sprintln(v...)) + l.stdPrint(fmt.Sprint(v...) + l.ln) } func (l *Logger) Printfln(format string, v ...interface{}) { - l.stdPrint(fmt.Sprintf(format + "\n", v...)) + l.stdPrint(fmt.Sprintf(format + l.ln, v...)) } func (l *Logger) Fatal(v ...interface{}) { @@ -165,12 +182,12 @@ func (l *Logger) Fatalf(format string, v ...interface{}) { } func (l *Logger) Fatalln(v ...interface{}) { - l.errPrint(fmt.Sprintln(v...)) + l.errPrint(fmt.Sprint(v...) + l.ln) os.Exit(1) } func (l *Logger) Fatalfln(format string, v ...interface{}) { - l.errPrint(fmt.Sprintf(format + "\n", v...)) + l.errPrint(fmt.Sprintf(format + l.ln, v...)) os.Exit(1) } @@ -187,41 +204,41 @@ func (l *Logger) Panicf(format string, v ...interface{}) { } func (l *Logger) Panicln(v ...interface{}) { - s := fmt.Sprintln(v...) + s := fmt.Sprint(v...) + l.ln l.errPrint(s) panic(s) } func (l *Logger) Panicfln(format string, v ...interface{}) { - s := fmt.Sprintf(format + "\n", v...) + s := fmt.Sprintf(format + l.ln, v...) l.errPrint(s) panic(s) } func (l *Logger) Info(v ...interface{}) { - l.stdPrint("[INFO] " + fmt.Sprintln(v...)) + l.stdPrint("[INFO] " + fmt.Sprint(v...) + l.ln) } func (l *Logger) Debug(v ...interface{}) { if l.GetDebug() { - l.stdPrint("[DEBU] " + fmt.Sprintln(v...)) + l.stdPrint("[DEBU] " + fmt.Sprint(v...) + l.ln) } } func (l *Logger) Notice(v ...interface{}) { - l.errPrint("[NOTI] " + fmt.Sprintln(v...)) + l.errPrint("[NOTI] " + fmt.Sprint(v...) + l.ln) } func (l *Logger) Warning(v ...interface{}) { - l.errPrint("[WARN] " + fmt.Sprintln(v...)) + l.errPrint("[WARN] " + fmt.Sprint(v...) + l.ln) } func (l *Logger) Error(v ...interface{}) { - l.errPrint("[ERRO] " + fmt.Sprintln(v...)) + l.errPrint("[ERRO] " + fmt.Sprint(v...) + l.ln) } func (l *Logger) Critical(v ...interface{}) { - l.errPrint("[CRIT] " + fmt.Sprintln(v...)) + l.errPrint("[CRIT] " + fmt.Sprint(v...) + l.ln) } func (l *Logger) Infof(format string, v ...interface{}) { @@ -251,27 +268,27 @@ func (l *Logger) Criticalf(format string, v ...interface{}) { } func (l *Logger) Infofln(format string, v ...interface{}) { - l.stdPrint("[INFO] " + fmt.Sprintf(format, v...) + "\n") + l.stdPrint("[INFO] " + fmt.Sprintf(format, v...) + l.ln) } func (l *Logger) Debugfln(format string, v ...interface{}) { if l.GetDebug() { - l.stdPrint("[DEBU] " + fmt.Sprintf(format, v...) + "\n") + l.stdPrint("[DEBU] " + fmt.Sprintf(format, v...) + l.ln) } } func (l *Logger) Noticefln(format string, v ...interface{}) { - l.errPrint("[NOTI] " + fmt.Sprintf(format, v...) + "\n") + l.errPrint("[NOTI] " + fmt.Sprintf(format, v...) + l.ln) } func (l *Logger) Warningfln(format string, v ...interface{}) { - l.errPrint("[WARN] " + fmt.Sprintf(format, v...) + "\n") + l.errPrint("[WARN] " + fmt.Sprintf(format, v...) + l.ln) } func (l *Logger) Errorfln(format string, v ...interface{}) { - l.errPrint("[ERRO] " + fmt.Sprintf(format, v...) + "\n") + l.errPrint("[ERRO] " + fmt.Sprintf(format, v...) + l.ln) } func (l *Logger) Criticalfln(format string, v ...interface{}) { - l.errPrint("[CRIT] " + fmt.Sprintf(format, v...) + "\n") + l.errPrint("[CRIT] " + fmt.Sprintf(format, v...) + l.ln) } \ No newline at end of file From b3047f0458134341f291517608ce7b6704e056f3 Mon Sep 17 00:00:00 2001 From: zseeker <675211118@qq.com> Date: Wed, 23 May 2018 16:41:21 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9glog=E6=8D=A2=E8=A1=8C?= =?UTF-8?q?=E7=AC=A6=E4=B8=BA=E5=8C=85=E5=8F=98=E9=87=8F=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87init=E5=8C=85=E5=88=9D=E5=A7=8B=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E4=B8=8D=E9=80=9A=E7=94=A8=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/glog/glog.go | 9 ----- g/os/glog/glog_logger.go | 77 +++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/g/os/glog/glog.go b/g/os/glog/glog.go index 661142d34..00f825d81 100644 --- a/g/os/glog/glog.go +++ b/g/os/glog/glog.go @@ -20,7 +20,6 @@ type Logger struct { path *gtype.String // 日志写入的目录路径 debug *gtype.Bool // 是否允许输出DEBUG信息 btSkip *gtype.Int // 错误产生时的backtrace回调信息skip条数 - ln string // 日志换行符,window是\r\n,linux是\n } // 默认的日志对象 @@ -33,17 +32,9 @@ func New() *Logger { path : gtype.NewString(), debug : gtype.NewBool(true), btSkip : gtype.NewInt(3), - ln : "\n", } } -// 获取默认的日志对象 -// @author zseeker -// @date 2018-05-23 -func GetLogger() *Logger { - return logger -} - // 日志日志目录绝对路径 func SetPath(path string) { logger.SetPath(path) diff --git a/g/os/glog/glog_logger.go b/g/os/glog/glog_logger.go index d017bbb48..5c76fdf81 100644 --- a/g/os/glog/glog_logger.go +++ b/g/os/glog/glog_logger.go @@ -24,6 +24,20 @@ const ( gDEFAULT_FILE_POOL_FLAGS = os.O_CREATE|os.O_WRONLY|os.O_APPEND ) +// 默认的日志换行符 +var ln string + +// 初始化日志换行符 +// @author zseeker +// @date 2018-05-23 +func init() { + if runtime.GOOS == "windows" { + ln = "\r\n" + } else { + ln = "\n" + } +} + // 设置BacktraceSkip func (l *Logger) SetBacktraceSkip(skip int) { l.btSkip.Set(skip) @@ -80,16 +94,6 @@ func (l *Logger) SetPath(path string) error { return errors.New(errstr) } l.path.Set(strings.TrimRight(path, gfile.Separator)) - - // 添加日志换行符适配,window是\r\n,linux是\n - // @author zseeker - // @date 2018-05-23 - if runtime.GOOS == "windows" { - l.ln = "\r\n" - } else { - l.ln = "\n" - } - return nil } @@ -98,14 +102,7 @@ func (l *Logger) print(defaultIO io.Writer, s string) { w := l.GetIO() if w == nil { if v := l.getFileByPool(); v != nil { - // 同时输出到文件和终端 - // @author zseeker - // @date 2018-05-23 - ws := []io.Writer { - v.File(), - os.Stdout, - } - w = io.MultiWriter(ws...) + w = v.File() defer v.Close() } else { w = defaultIO @@ -126,22 +123,22 @@ func (l *Logger) errPrint(s string) { // 记录调用回溯信息 backtrace := l.backtrace() if s[len(s) - 1] == byte('\n') { - s = s + backtrace + l.ln + s = s + backtrace + ln } else { - s = s + l.ln + backtrace + l.ln + s = s + ln + backtrace + ln } l.print(os.Stderr, s) } // 调用回溯字符串 func (l *Logger) backtrace() string { - backtrace := "Trace:" + l.ln + backtrace := "Trace:" + ln index := 1 for i := 1; i < 10000; i++ { if _, cfile, cline, ok := runtime.Caller(i + l.btSkip.Val()); ok { // 不打印出go源码路径 if !gregx.IsMatchString("^" + runtime.GOROOT(), cfile) { - backtrace += strconv.Itoa(index) + ". " + cfile + ":" + strconv.Itoa(cline) + l.ln + backtrace += strconv.Itoa(index) + ". " + cfile + ":" + strconv.Itoa(cline) + ln index++ } } else { @@ -164,11 +161,11 @@ func (l *Logger) Printf(format string, v ...interface{}) { } func (l *Logger) Println(v ...interface{}) { - l.stdPrint(fmt.Sprint(v...) + l.ln) + l.stdPrint(fmt.Sprint(v...) + ln) } func (l *Logger) Printfln(format string, v ...interface{}) { - l.stdPrint(fmt.Sprintf(format + l.ln, v...)) + l.stdPrint(fmt.Sprintf(format + ln, v...)) } func (l *Logger) Fatal(v ...interface{}) { @@ -182,12 +179,12 @@ func (l *Logger) Fatalf(format string, v ...interface{}) { } func (l *Logger) Fatalln(v ...interface{}) { - l.errPrint(fmt.Sprint(v...) + l.ln) + l.errPrint(fmt.Sprint(v...) + ln) os.Exit(1) } func (l *Logger) Fatalfln(format string, v ...interface{}) { - l.errPrint(fmt.Sprintf(format + l.ln, v...)) + l.errPrint(fmt.Sprintf(format + ln, v...)) os.Exit(1) } @@ -204,41 +201,41 @@ func (l *Logger) Panicf(format string, v ...interface{}) { } func (l *Logger) Panicln(v ...interface{}) { - s := fmt.Sprint(v...) + l.ln + s := fmt.Sprint(v...) + ln l.errPrint(s) panic(s) } func (l *Logger) Panicfln(format string, v ...interface{}) { - s := fmt.Sprintf(format + l.ln, v...) + s := fmt.Sprintf(format + ln, v...) l.errPrint(s) panic(s) } func (l *Logger) Info(v ...interface{}) { - l.stdPrint("[INFO] " + fmt.Sprint(v...) + l.ln) + l.stdPrint("[INFO] " + fmt.Sprint(v...) + ln) } func (l *Logger) Debug(v ...interface{}) { if l.GetDebug() { - l.stdPrint("[DEBU] " + fmt.Sprint(v...) + l.ln) + l.stdPrint("[DEBU] " + fmt.Sprint(v...) + ln) } } func (l *Logger) Notice(v ...interface{}) { - l.errPrint("[NOTI] " + fmt.Sprint(v...) + l.ln) + l.errPrint("[NOTI] " + fmt.Sprint(v...) + ln) } func (l *Logger) Warning(v ...interface{}) { - l.errPrint("[WARN] " + fmt.Sprint(v...) + l.ln) + l.errPrint("[WARN] " + fmt.Sprint(v...) + ln) } func (l *Logger) Error(v ...interface{}) { - l.errPrint("[ERRO] " + fmt.Sprint(v...) + l.ln) + l.errPrint("[ERRO] " + fmt.Sprint(v...) + ln) } func (l *Logger) Critical(v ...interface{}) { - l.errPrint("[CRIT] " + fmt.Sprint(v...) + l.ln) + l.errPrint("[CRIT] " + fmt.Sprint(v...) + ln) } func (l *Logger) Infof(format string, v ...interface{}) { @@ -268,27 +265,27 @@ func (l *Logger) Criticalf(format string, v ...interface{}) { } func (l *Logger) Infofln(format string, v ...interface{}) { - l.stdPrint("[INFO] " + fmt.Sprintf(format, v...) + l.ln) + l.stdPrint("[INFO] " + fmt.Sprintf(format, v...) + ln) } func (l *Logger) Debugfln(format string, v ...interface{}) { if l.GetDebug() { - l.stdPrint("[DEBU] " + fmt.Sprintf(format, v...) + l.ln) + l.stdPrint("[DEBU] " + fmt.Sprintf(format, v...) + ln) } } func (l *Logger) Noticefln(format string, v ...interface{}) { - l.errPrint("[NOTI] " + fmt.Sprintf(format, v...) + l.ln) + l.errPrint("[NOTI] " + fmt.Sprintf(format, v...) + ln) } func (l *Logger) Warningfln(format string, v ...interface{}) { - l.errPrint("[WARN] " + fmt.Sprintf(format, v...) + l.ln) + l.errPrint("[WARN] " + fmt.Sprintf(format, v...) + ln) } func (l *Logger) Errorfln(format string, v ...interface{}) { - l.errPrint("[ERRO] " + fmt.Sprintf(format, v...) + l.ln) + l.errPrint("[ERRO] " + fmt.Sprintf(format, v...) + ln) } func (l *Logger) Criticalfln(format string, v ...interface{}) { - l.errPrint("[CRIT] " + fmt.Sprintf(format, v...) + l.ln) + l.errPrint("[CRIT] " + fmt.Sprintf(format, v...) + ln) } \ No newline at end of file From b489c0a518cb8f6722d89afa9d8f2356f721b489 Mon Sep 17 00:00:00 2001 From: zseeker <675211118@qq.com> Date: Wed, 23 May 2018 18:05:06 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9glog=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=8D=A2=E8=A1=8C=E7=AC=A6=E5=88=9D=E5=88=9D=E5=A7=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/glog/glog_logger.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/g/os/glog/glog_logger.go b/g/os/glog/glog_logger.go index 5c76fdf81..cc9ef47eb 100644 --- a/g/os/glog/glog_logger.go +++ b/g/os/glog/glog_logger.go @@ -25,7 +25,7 @@ const ( ) // 默认的日志换行符 -var ln string +var ln = "\n" // 初始化日志换行符 // @author zseeker @@ -33,9 +33,7 @@ var ln string func init() { if runtime.GOOS == "windows" { ln = "\r\n" - } else { - ln = "\n" - } + } } // 设置BacktraceSkip