从goroutines写入STDOUT时避免混乱输出

时间:2013-12-11 12:12:43

标签: logging go output stdout

写入stdout或日志时,如何确保来自多个 goroutine 的输出 是不是搞砸了输出?

e.g。确保输出就像这样

Routine 1 found 1235 entries
Routine 3 found 999 entries
Routine 2 found 24 entries

并不喜欢这个

Routine 1 fouRoutine 3 found 999 entries
nd 1235 entriRoutine 2 found 24 entries
es

我的意思是来自一个 goroutine 的输出不是与另一个同时写入

即。是否有一个库或标准方法来获取输出周围的信号量?

1 个答案:

答案 0 :(得分:5)

使用log包进行日志记录。来自log.Logger

  

Logger表示一个活动的日志记录对象,它为io.Writer生成输出行。每个日志记录操作只对Writer的Write方法进行一次调用。 Logger可以同时使用多个goroutines;它保证序列化对Writer的访问。

fmtgenerally not safe与多个goroutine一起使用。

如果关注时间(锁定的同步),请在日志语句前添加go

go log.Println("some log")

但请注意,日志输出可能(最肯定)延迟。