glog增加对文件名称格式的自定义设置,支持gtime日期格式

This commit is contained in:
john
2018-10-09 21:41:07 +08:00
parent f0c4068448
commit 2af1639751
4 changed files with 75 additions and 14 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

22
geg/os/glog/glog_file.go Normal file
View File

@ -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日期格式")
}