mirror of
https://gitee.com/johng/gf
synced 2026-06-07 10:22:11 +08:00
glog增加对文件名称格式的自定义设置,支持gtime日期格式
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
22
geg/os/glog/glog_file.go
Normal 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日期格式")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user