登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-23 22:45:34 444浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《正在将标准库日志重定向到 logrus 线程安全》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我在我的 go 项目中使用 logrus 库进行结构化日志记录。

我的 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

线程安全

默认情况下,Logger 受到并发写入互斥锁的保护。

when it isn't除外。

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

本篇关于《正在将标准库日志重定向到 logrus 线程安全》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>