基于golang的log库编写一个日志插件,并发写入日志,使用时直接调用里面的公共方法,希望不吝赐教(写完不敢用,怕出问题,因为没有关闭*file)
package utils import ( "log" "os" "sync" "time" ) //日志文件 type logfile struct { date string fileName string openFile *os.File } type logFiles struct { rm sync.RWMutex logf map[string]*logfile } //存入channel的结构体 type clog struct { fileName string msg interface{} } var ( //用channel记录日志 eChan = make(chan clog, 100) nChan = make(chan clog, 100) wChan = make(chan clog, 100) loger logFiles ) const flag = log.Llongfile + log.Ltime func init() { logmp := make(map[string]*logfile, 3) loger.logf = logmp go writerLog() //监控日志写入 } //获取log *file 资源 func getOpenFile(fileName string) *os.File { currentDate := time.Now().Format("2006-01-03") if v, ok := loger.logf[fileName]; ok { if v.date != currentDate { //判断是否过期 loger.rm.Lock() newOpen, err := os.OpenFile(fileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) if err != nil { log.Fatal(err) } loger.logf[fileName] = &logfile{ date: currentDate, fileName: fileName, openFile: newOpen, } loger.rm.Unlock() return newOpen } else { return v.openFile } } loger.rm.Lock() newOpen, err := os.OpenFile(fileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) if err != nil { log.Fatal(err) } loger.logf[fileName] = &logfile{ date: currentDate, fileName: fileName, openFile: newOpen, } loger.rm.Unlock() return newOpen } //将日志写入文件 func writerLog() { for { select { case l := <-eChan: file := getOpenFile(l.fileName) logger := log.New(file, "", flag) logger.Println(l.msg) file.Sync() case w := <-wChan: file := getOpenFile(w.fileName) logger := log.New(file, "", flag) logger.Println(w.msg) file.Sync() case n := <-nChan: file := getOpenFile(n.fileName) logger := log.New(file, "", flag) logger.Println(n.msg) file.Sync() } } } //警告 func LogWarning(msg interface{}) { wChan <- clog{ fileName: "logs/warning" + time.Now().Format("2006-01-03") + ".log", msg: msg, } } //致命错误 func LogError(msg interface{}) { eChan <- clog{ fileName: "logs/err" + time.Now().Format("2006-01-03") + ".log", msg: msg, } } //记录 func LogNote(msg interface{}) { nChan <- clog{ fileName: "logs/note" + time.Now().Format("2006-01-03") + ".log", msg: msg, } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算