去语言的日志模块没有提供日志旋转接口,但实际开发中我们需要该功能:
我们不希望单个日志过大,否则文本编辑器无法打开,查看比较困难;
更不希望占用太大的存储空间,可以指定最多存多少个日志文件。
借助带缓冲的通道来实现。
<强>示例代码如下:
/* golang日志旋转的例子 */主要包 导入( “fmt” “日志” “操作系统” “时间” ) 常量( BACKUP_COUNT=5 MAX_FILE_BYTES=2 * 1024 ) func doRotate (fPrefix字符串){ j:=BACKUP_COUNT;j祝辞=1;j - { curFileName:=fmt.Sprintf (“% s_ % d.log fPrefix, j) 凯西:=j - 1 preFileName:=fmt.Sprintf (“% s_ % d.log fPrefix, k) 如果k==0 { preFileName=fmt.Sprintf (“% s。日志”,fPrefix) } _,犯错:=os.Stat (curFileName) 如果做错了==nil { os.Remove (curFileName) fmt。Println(“删除:“curFileName) } _,呃=os.Stat (preFileName) 如果做错了==nil { fmt。Println (“preFileName重命名:“,”=比;”,curFileName) 呃=操作系统。重命名(preFileName curFileName) 如果犯错!=nil { fmt.Println (err) } } } } func NewLogger (fPrefix字符串)(*日志。记录器,* os.File) { var记录器* log.Logger 文件名:=fmt.Sprintf (“% s。日志”,fPrefix) fmt。Println(文件名:文件名) 日志文件,犯错:=操作系统。OpenFile(文件名,os.O_RDWR | os.O_CREATE |操作系统。O_APPEND, 0666) 如果犯错!=nil { fmt。Println(“打开文件错误!”) 其他}{ 记录器=日志。新(日志文件,“(调试)”,log.Ldate | log.Ltime | log.Lshortfile) } 返回日志,日志文件 } func logWorker (msgQueue & lt;脚板字符串){ fPrefix:=拔毒? 日志,日志文件:=NewLogger (fPrefix) 味精:=范围msgQueue { logger.Println(味精) fi err2:=logFile.Stat () 如果err2==nil { 如果fi.Size()在MAX_FILE_BYTES { logFile.Close () doRotate (fPrefix) 日志,日志文件=NewLogger (fPrefix) } } } logFile.Close () } 函数main () { 陈msgQueue:=(字符串,1000) 去logWorker (msgQueue) j:=1;j & lt;=1000;j + + { msgQueue & lt;——fmt。Sprintf (“msg_ % d j) 时间。睡眠(1 * time.Second) } 关上(msgQueue) 返回 }运行效果如下:
(root@local t2) #。/logRotateTest1 文件名:msg.log 重命名:味精。日志=比;msg_1.log 文件名:msg.log 重命名:msg_1。日志=比;msg_2.log 重命名:味精。日志=比;msg_1.log 文件名:msg.log 重命名:msg_2。日志=比;msg_3.log 重命名:msg_1。日志=比;msg_2.log 重命名:味精。日志=比;msg_1.log 文件名:msg.log ^ C
这里只是个简单的示例代码,实现了日志旋转,更多功能需自行开发。
好,就这些了,希望对你有帮助。
以上这篇golang之日志旋转详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。