文章标题 原创 翻译 转载 文章内容 简单封装了下go log,四个日志等级,能满足基本业务需求,通过github.com/robfig/cron可以每天生成一个日志文件 ``` package logger import ( "io" "log" "os" ) const ( LTrace = iota LInfo LWarn LError ) var ( file *os.File Trace *log.Logger Info *log.Logger Warn *log.Logger Error *log.Logger ) func newLevel(file *os.File, level, curLevel int) *log.Logger { var flag int = (log.Ldate | log.Lmicroseconds | log.Lshortfile) logNew := func(prefix string, l1, l2 int) *log.Logger { if l1 <= l2 { return log.New(io.MultiWriter(file, os.Stdout), prefix, flag) } else { return log.New(os.Stdout, prefix, flag) } } switch level { case LTrace: return logNew("[TRACE] ", curLevel, LTrace) case LInfo: return logNew("[INFO ] ", curLevel, LInfo) case LWarn: return logNew("[WARN ] ", curLevel, LWarn) case LError: return logNew("[ERROR] ", curLevel, LError) default: return logNew("[TRACE] ", curLevel, LTrace) } } func Init(path string, level int) error { var oldFile = file file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { return err } Trace = newLevel(file, LTrace, level) Info = newLevel(file, LInfo, level) Warn = newLevel(file, LWarn, level) Error = newLevel(file, LError, level) if oldFile != nil { oldFile.Close() } return nil } ``` 在cron中初始化,每天凌晨生成一个新的日志文件 ``` package schedule import ( "fmt" "ningtogo/app/logger" "time" "github.com/robfig/cron" ) var ( c *cron.Cron ) func init() { c = cron.New() c.AddFunc("0 0 0 * * *", func() { initLogger() }) c.Start() initLogger() } func initLogger() { logPath := fmt.Sprintf("logs/ningtogo_%s.log", time.Now().Format("20060102")) if err := logger.Init(logPath, logger.LTrace); err != nil { fmt.Println("init logger failed", err) } else { logger.Info.Println("logger init success") } } ``` 使用: ``` package main import ( "fmt" "os" "./logger" ) func init() { if err := logger.Init("test.log", logger.LInfo); err != nil { fmt.Println("init logger failed", err) os.Exit(1) } } func main() { logger.Trace.Println("trace message") logger.Info.Println("info message") logger.Warn.Println("warn message") logger.Error.Println("error message") } ``` 文章类别 Python Mobile Android Java Shell Life Database Bug Windows IOS Tools Boost Node.js Mac Product Tips C/C++ Golang Javascript React Qt MQ MongoDB Design Web Linux LLM ChatGPT RAG AI 提交