一,代码
1,全局文件:
// 日志消息结构体
type LogMessage struct {
Level string
Message string
}
//通道
var LogChan chan LogMessage
//日志文件句柄
var GlobalLogFile *os.File
// 异步日志函数
func AsyncLog(logCh chan LogMessage) {
for {
select {
case msg := <-logCh:
// 获取当前时间
now := time.Now()
nowTime:=now.Format("2006-01-02 15:04:05")
fmt.Println("协程中接收到了消息:"+nowTime)
writeString, err := GlobalLogFile.WriteString(nowTime + " [" + msg.Level + "] " + msg.Message + "\n")
if err != nil {
fmt.Printf("写入时报错:",err)
}
fmt.Println(writeString)
}
}
}
2,启用协程:
//得到年月日
now := time.Now()
dateStr:=now.Format("2006-01-02")
filePath := "/data/goapp/logs/"+dateStr+".log"
// 创建一个日志文件
var errLog error
config.GlobalLogFile, errLog = os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if errLog != nil {
log.Fatalf("无法打开日志文件:%v", errLog)
}
defer config.GlobalLogFile.Close()
// 创建日志消息的buffered channel
config.LogChan = make(chan config.LogMessage, 1000)
// 启动异步日志goroutine
go config.AsyncLog(config.LogChan)
3,发送消息
//得到打开的日志文件的路径
origFilePath := config.GlobalLogFile.Name();
fmt.Println("日志文件路径:",origFilePath)
//得到当前要使用的文件路径:
now := time.Now()
dateStr:=now.Format("2006-01-02")
curFilePath := "/data/goapp/logs/"+dateStr+".log"
//如果文件名不一致时重新生成日志文件
if curFilePath != origFilePath {
//关闭前一个文件句柄
config.GlobalLogFile.Close()
// 创建一个日志文件
var errLog error
config.GlobalLogFile, errLog = os.OpenFile(curFilePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if errLog != nil {
log.Fatalf("无法打开日志文件:%v", errLog)
}
}
// 发送日志消息
config.LogChan <- config.LogMessage{"INFO", "这是一条info信息."}
config.LogChan <- config.LogMessage{"ERROR", "这是一条错误信息."}
二,测试效果
查看文件内容:
2024-11-26 10:21:10 [INFO] 这是一条info信息.
2024-11-26 10:21:10 [ERROR] 这是一条错误信息.
2024-11-26 10:21:16 [INFO] 这是一条info信息.
2024-11-26 10:21:16 [ERROR] 这是一条错误信息.
2024-11-26 10:21:17 [INFO] 这是一条info信息.
2024-11-26 10:21:17 [ERROR] 这是一条错误信息.
2024-11-26 10:21:18 [INFO] 这是一条info信息.
2024-11-26 10:21:18 [ERROR] 这是一条错误信息.
2024-11-26 10:21:20 [INFO] 这是一条info信息.
2024-11-26 10:21:20 [ERROR] 这是一条错误信息.
2024-11-26 10:21:22 [INFO] 这是一条info信息.
2024-11-26 10:21:22 [ERROR] 这是一条错误信息.
2024-11-26 10:21:24 [INFO] 这是一条info信息.
2024-11-26 10:21:24 [ERROR] 这是一条错误信息.
标签:11,异步,26,21,10,用协程,golang,2024,日志 From: https://www.cnblogs.com/architectforest/p/18569597