1 回答

TA貢獻1816條經(jīng)驗 獲得超6個贊
您正在每個 goroutine 中設(shè)置日志包的默認全局記錄器輸出。
您可能想要做更多類似的事情:
func (lw *LogWorker) Work(evChannel chan Event) {
fmt.Println(lw.FileName)
lg := log.New(&lumberjack.Logger {
Filename: lw.FileName,
MaxSize: lw.MaxSize,
MaxBackups: lw.MaxBackups,
MaxAge: lw.MaxAge,
}, "", 0)
for {
event := <- evChannel
lg.Println(Csv(event))
}
}
這將為每個 goroutine 提供一個記錄器。
在您的版本中,您可能只有最后一個要執(zhí)行(可能是最后一個 goroutine 生成,但不能保證)
為了進一步改進,您可能還希望將 for 循環(huán)寫為:
for event := range evChannel {
lg.Println(Csv(event))
}
這樣,它會在通道關(guān)閉時終止 goroutine,而不是在關(guān)閉通道中的空值上旋轉(zhuǎn)。 請參閱此處以供參考
- 1 回答
- 0 關(guān)注
- 205 瀏覽
添加回答
舉報