最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

详细介绍golang中的log模块

来源:动视网 责编:小OO 时间:2020-11-27 14:24:07
文档

详细介绍golang中的log模块

操作系统: CentOS 6.9_x。go语言版本: 1.8.3。问题描述;golang的log模块提供的有写日志功能,示例代码如下:/*golang log example*/package mainimport ( ";log";";os";)func main() { logFile,err := os.Create(";test1.log";) defer logFile.Close() if err。= nil { log.Fatalln(";open file error运行效果。
推荐度:
导读操作系统: CentOS 6.9_x。go语言版本: 1.8.3。问题描述;golang的log模块提供的有写日志功能,示例代码如下:/*golang log example*/package mainimport ( ";log";";os";)func main() { logFile,err := os.Create(";test1.log";) defer logFile.Close() if err。= nil { log.Fatalln(";open file error运行效果。


下面小编就为大家带来一篇golang之log rotate详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

操作系统: CentOS 6.9_x

go语言版本: 1.8.3

问题描述

golang的log模块提供的有写日志功能,示例代码如下:

/*
golang log example

*/
package main

import (
 "log"
 "os"
)

func main() {
 logFile,err := os.Create("test1.log")
 defer logFile.Close()
 if err != nil {
 log.Fatalln("open file error!")
 }
 logger := log.New(logFile,"[Debug]",log.Ldate | log.Ltime | log.Lshortfile)
 logger.Println("test debug message")
 logger.SetPrefix("[Info]")
 logger.Println("test info message")

}

运行效果:

[root@local t2]# go build logTest1.go
[root@local t2]# ./logTest1
[root@local t2]# cat test1.log
[Debug]2017/06/13 23:18:36 logTest1.go:19: test debug message
[Info]2017/06/13 23:18:36 logTest1.go:21: test info message
[root@local t2]#

go语言的log模块没有提供log rotate接口,但实际开发中我们需要该功能:

我们不希望单个日志过大,否则文本编辑器无法打开,查看比较困难;

更不希望占用太大的存储空间,可以指定最多存多少个日志文件。

解决方案

借助带缓冲的channel来实现。

示例代码如下:

/*
 golang log rotate example

*/

package main

import (
 "fmt"
 "log"
 "os"
 "time"
)

const (
 BACKUP_COUNT = 5
 MAX_FILE_BYTES = 2 * 1024
)

func doRotate(fPrefix string) {
 for j := BACKUP_COUNT; j >= 1; j-- {
 curFileName := fmt.Sprintf("%s_%d.log",fPrefix,j)
 k := j-1
 preFileName := fmt.Sprintf("%s_%d.log",fPrefix,k)

 if k == 0 {
 preFileName = fmt.Sprintf("%s.log", fPrefix)
 }
 _,err := os.Stat(curFileName)
 if err == nil {
 os.Remove(curFileName)
 fmt.Println("remove : ", curFileName)
 }
 _,err = os.Stat(preFileName)
 if err == nil {
 fmt.Println("rename : ", preFileName, " => ", curFileName)
 err = os.Rename(preFileName, curFileName)
 if err != nil {
 fmt.Println(err)
 }
 }
 }
}

func NewLogger(fPrefix string) (*log.Logger, *os.File) {
 var logger *log.Logger
 fileName := fmt.Sprintf("%s.log", fPrefix)
 fmt.Println("fileName :", fileName)
 logFile, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

 if err != nil {
 fmt.Println("open file error!")
 } else {
 logger = log.New(logFile, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)
 }
 return logger, logFile
}

func logWorker(msgQueue <-chan string) {
 fPrefix := "msg"
 logger, logFile := NewLogger(fPrefix)
 for msg := range msgQueue {
 logger.Println(msg)
 fi, err2 := logFile.Stat()
 if err2 == nil {
 if fi.Size() > MAX_FILE_BYTES {
 logFile.Close()
 doRotate(fPrefix)
 logger,logFile = NewLogger(fPrefix)
 }
 }
 }
 logFile.Close()
}

func main() {
 msgQueue := make(chan string, 1000)
 go logWorker(msgQueue)

 for j := 1; j <= 1000; j++ {
 msgQueue <- fmt.Sprintf("msg_%d", j)
 time.Sleep(1 * time.Second)
 }
 close(msgQueue)
 return
}

运行效果如下:

[root@local t2]# ./logRotateTest1
fileName : msg.log
rename : msg.log => msg_1.log
fileName : msg.log
rename : msg_1.log => msg_2.log
rename : msg.log => msg_1.log
fileName : msg.log
rename : msg_2.log => msg_3.log
rename : msg_1.log => msg_2.log
rename : msg.log => msg_1.log
fileName : msg.log
^C

讨论

这里只是个简单的示例代码,实现了log rotate,更多功能需自行开发。

好,就这些了,希望对你有帮助。

文档

详细介绍golang中的log模块

操作系统: CentOS 6.9_x。go语言版本: 1.8.3。问题描述;golang的log模块提供的有写日志功能,示例代码如下:/*golang log example*/package mainimport ( ";log";";os";)func main() { logFile,err := os.Create(";test1.log";) defer logFile.Close() if err。= nil { log.Fatalln(";open file error运行效果。
推荐度:
标签: 介绍 模块 go
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top