首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将标准库日志重定向到logrus线程安全。

将标准库日志重定向到logrus线程安全。
EN

Stack Overflow用户
提问于 2019-09-09 08:30:13
回答 1查看 1.1K关注 0票数 1

在Go项目中,我使用罗格鲁库进行结构化日志记录。

我已将我的logrus配置如下:

代码语言:javascript
复制
// 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。

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

代码语言:javascript
复制
log.SetOutput(gLog.logrus.Writer())

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

如果一个线程/go例程正在执行log.Println(),而另一个线程执行gLog.logrus.Info()或在logrus上执行某些东西,这会好吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-09 08:48:24

洛格丝安全吗?

螺纹安全 默认情况下,Logger由互斥锁保护,用于并发写入。

除了当它不是

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57850353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档