golang的log包在打开log文件的时候需要加锁吗?

发布于 2022-09-11 19:06:58 字数 735 浏览 40 评论 0

package main

import "log"
import "os"
import "time"
import "sync"

func LOG(msg string, level string){
    if level == ""{
        level = "[WARNING]:"
    }
    var mu sync.Mutex
    filename := "./" + time.Now().Format("2006_01_02") + ".log"
    //mu.Lock() //要不要加这个锁?
    logfile,err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE,0666) //这里如果多个goroutine同时调用LOG函数会出错吗?
    if err != nil{
        log.Fatalln("open log file error")
    }
    logger := log.New(logfile, level, log.LstdFlags|log.Lshortfile)
    logger.Println(msg)
    logfile.Close()
    //mu.Unlock()
}

func main(){
    LOG("message", "[INFO]:")
}

我知道golang的log包是goroutine安全的,但是在log.New()文件之前需要先打开日志文件,打开日志文件这一步要不要加锁?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

神经暖 2022-09-18 19:06:58

这是我的看法:

  1. 开启一个goroutine专门从其他goroutine接受日志信息写入。
  2. 如果一定要多个goroutine来获得写句柄,是需要加互斥锁的。
  3. 不建议自己做日志系统,建议使用开源的轮子,保证项目可用性
酒中人 2022-09-18 19:06:58
  1. 日志数据直接写入channel,channel并发安全
  2. 新协程定期落盘,这样解决问题
轻许诺言 2022-09-18 19:06:58

按照你的写法,那肯定得加锁

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文