mirror of
https://gitee.com/johng/gf
synced 2026-06-30 11:05:11 +08:00
新增glog对系统换行符的自适配
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user