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

Sus*_*lor 2 logging stdout go output

写入stdout或记录时,如何确保几个goroutine 的输出不会弄乱输出?

例如,确保输出是这样的

Routine 1 found 1235 entries
Routine 3 found 999 entries
Routine 2 found 24 entries
Run Code Online (Sandbox Code Playgroud)

而不是这样的

Routine 1 fouRoutine 3 found 999 entries
nd 1235 entriRoutine 2 found 24 entries
es
Run Code Online (Sandbox Code Playgroud)

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

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

nem*_*emo 5

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

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

对于一个以上的goroutine,使用该fmt包装通常不安全的.

如果需要考虑时间(锁定的同步),请在日志语句前加上go:

go log.Println("some log")
Run Code Online (Sandbox Code Playgroud)

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