From 2af1639751b5abc10c273444b5173da31d76c5c8 Mon Sep 17 00:00:00 2001 From: john Date: Tue, 9 Oct 2018 21:41:07 +0800 Subject: [PATCH] =?UTF-8?q?glog=E5=A2=9E=E5=8A=A0=E5=AF=B9=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=A7=B0=E6=A0=BC=E5=BC=8F=E7=9A=84=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E8=AE=BE=E7=BD=AE=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?gtime=E6=97=A5=E6=9C=9F=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/glog/glog.go | 23 ++++++++++------------- g/os/glog/glog_logger.go | 28 +++++++++++++++++++++++++++- g/os/glog/glog_logger_linkop.go | 16 ++++++++++++++++ geg/os/glog/glog_file.go | 22 ++++++++++++++++++++++ 4 files changed, 75 insertions(+), 14 deletions(-) create mode 100644 geg/os/glog/glog_file.go diff --git a/g/os/glog/glog.go b/g/os/glog/glog.go index 9345b0206..ad8947124 100644 --- a/g/os/glog/glog.go +++ b/g/os/glog/glog.go @@ -10,22 +10,9 @@ package glog import ( - "io" - "sync" "gitee.com/johng/gf/g/container/gtype" ) -type Logger struct { - mu sync.RWMutex - pr *Logger // 父级Logger - io io.Writer // 日志内容写入的IO接口 - path *gtype.String // 日志写入的目录路径 - 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 @@ -49,6 +36,11 @@ func SetPath(path string) { logger.SetPath(path) } +// 日志文件名称 +func SetFile(file string) { + logger.SetFile(file) +} + // 设置全局的日志记录等级 func SetLevel(level int) { logger.SetLevel(level) @@ -98,6 +90,11 @@ func Cat(category string) *Logger { return logger.Cat(category) } +// 设置日志输出文件名称格式 +func File(file string) *Logger { + return logger.File(file) +} + // 设置日志打印等级 func Level(level int) *Logger { return logger.Level(level) diff --git a/g/os/glog/glog_logger.go b/g/os/glog/glog_logger.go index c572fa3bc..bf0bb28af 100644 --- a/g/os/glog/glog_logger.go +++ b/g/os/glog/glog_logger.go @@ -19,9 +19,24 @@ import ( "gitee.com/johng/gf/g/container/gtype" "gitee.com/johng/gf/g/os/gmlock" "gitee.com/johng/gf/g/os/gfpool" + "sync" + "gitee.com/johng/gf/g/os/gtime" ) +type Logger struct { + mu sync.RWMutex + pr *Logger // 父级Logger + io io.Writer // 日志内容写入的IO接口 + path *gtype.String // 日志写入的目录路径 + file *gtype.String // 日志文件名称格式 + level *gtype.Int // 日志输出等级 + btSkip *gtype.Int // 错误产生时的backtrace回调信息skip条数 + btEnabled *gtype.Bool // 是否当打印错误时同时开启backtrace打印 + alsoStdPrint *gtype.Bool // 控制台打印开关,当输出到文件/自定义输出时也同时打印到终端 +} + const ( + gDEFAULT_FILE_FORMAT = `{Y-m-d}.log` gDEFAULT_FILE_POOL_FLAGS = os.O_CREATE|os.O_WRONLY|os.O_APPEND ) @@ -40,6 +55,7 @@ func New() *Logger { return &Logger { io : nil, path : gtype.NewString(), + file : gtype.NewString(gDEFAULT_FILE_FORMAT), level : gtype.NewInt(defaultLevel.Val()), btSkip : gtype.NewInt(), btEnabled : gtype.NewBool(true), @@ -53,6 +69,7 @@ func (l *Logger) Clone() *Logger { pr : l, io : l.GetIO(), path : l.path.Clone(), + file : l.path.Clone(), level : l.level.Clone(), btSkip : l.btSkip.Clone(), btEnabled : l.btEnabled.Clone(), @@ -106,7 +123,11 @@ func (l *Logger) GetIO() io.Writer { // 获取默认的文件IO func (l *Logger) getFilePointer() *gfpool.File { if path := l.path.Val(); path != "" { - fpath := path + gfile.Separator + time.Now().Format("2006-01-02.log") + // 文件名称中使用"{}"包含的内容使用gtime格式化 + file, _ := gregex.ReplaceStringFunc(`{.+?}`, l.file.Val(), func(s string) string { + return gtime.Now().Format(strings.Trim(s, "{}")) + }) + fpath := path + gfile.Separator + file if fp, err := gfpool.Open(fpath, gDEFAULT_FILE_POOL_FLAGS, 0666); err == nil { return fp } else { @@ -129,6 +150,11 @@ func (l *Logger) SetPath(path string) error { return nil } +// 日志文件名称 +func (l *Logger) SetFile(file string) { + l.file.Set(file) +} + // 设置写日志时开启or关闭控制台打印,默认是关闭的 func (l *Logger) SetStdPrint(enabled bool) { l.alsoStdPrint.Set(enabled) diff --git a/g/os/glog/glog_logger_linkop.go b/g/os/glog/glog_logger_linkop.go index d15f8afd1..837d1f1ba 100644 --- a/g/os/glog/glog_logger_linkop.go +++ b/g/os/glog/glog_logger_linkop.go @@ -25,6 +25,22 @@ func (l *Logger) Cat(category string) *Logger { return logger } +// 日志文件格式 +func (l *Logger) File(file string) *Logger { + logger := (*Logger)(nil) + if l.pr == nil { + logger = l.Clone() + } else { + logger = l + } + path := l.path.Val() + if path == "" { + path = gfile.Pwd() + } + logger.SetFile(file) + return logger +} + // 设置日志打印等级 func (l *Logger) Level(level int) *Logger { logger := (*Logger)(nil) diff --git a/geg/os/glog/glog_file.go b/geg/os/glog/glog_file.go new file mode 100644 index 000000000..4cd534201 --- /dev/null +++ b/geg/os/glog/glog_file.go @@ -0,0 +1,22 @@ +package main + +import ( + "gitee.com/johng/gf/g/os/glog" +) + +// 设置日志等级 +func main() { + l := glog.New() + l.SetPath("/tmp/glog") + l.Println("标准文件名称格式,使用当前时间时期") + + l.SetFile("stdout.log") + l.Println("设置日志输出文件名称格式为同一个文件") + + l.File("stderr.log").Println("支持链式操作") + + l.File("error-{Ymd}.log").Println("文件名称支持带gtime日期格式") + l.File("access-{Ymd}.log").Println("文件名称支持带gtime日期格式") +} + +