gpt4 book ai didi

go - 正在将标准库日志重定向到 logrus 线程安全

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:12 26 4
gpt4 key购买 nike

我正在使用 logrus我的 Go 项目中用于结构化日志记录的库。

我的 logrus 配置如下:


// Global variable for logging
var gLog = &Logger{moduleName: ModuleName, logrus: logrus.New()}

type Logger struct {
moduleName string
logrus *logrus.Logger
}

func SetupGlobalLogger(logPrefix string, logMode string) error {
if logMode == "file" {
logFilePath := fmt.Sprintf("var/%s.log", vite.Environment())

file, err := os.OpenFile(logFilePath, logFileFlags, logFilePermission)
if err != nil {
return err
}
gLog.logrus.SetOutput(file)

// redirect logs written using standard log library to same place as logrus
log.SetOutput(gLog.logrus.Writer())

log.Println(vite.MarkInfo, "redirect log to file:", logFilePath)
}

return nil
}

在这个 Go 项目中,有几个地方使用了标准日志库语句,如 log.Println()

我想将这些日志消息重定向到 logrus。

为此,我在上面的代码中使用了以下语句。

log.SetOutput(gLog.logrus.Writer())

我的问题是:这个线程安全吗?

如果一个线程/go-routine 正在执行 log.Println() 而另一个线程/go-routine 正在执行 gLog.logrus.Info() 或 logrus 上的其他东西,这样可以吗?

最佳答案

Logrus 是线程安全的吗?

Yes :

Thread safety

By default, Logger is protected by a mutex for concurrent writes.

除了 when it isn't .

大多数非线程安全的情况都是只有在极少数情况下才会发生的错误。当然,它们中的任何一个对您是否重要取决于您的用例。

关于go - 正在将标准库日志重定向到 logrus 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57850353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com