在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例程正在执行log.Println(),而另一个线程执行gLog.logrus.Info()或在logrus上执行某些东西,这会好吗?
https://stackoverflow.com/questions/57850353
复制相似问题