2016-03-28 68 views
0

我一直在編寫能夠同時執行任務的代碼,並且每個任務都可能導致可能同時執行的許多子任務。日誌記錄的最佳實踐(在併發執行中調試)

我在Go上學到了足夠的知識,它在一些激烈的測試中運行良好。我們有將日誌文件中正在執行的工作信息記入日誌文件的做法。但生成的日誌(> 50MB)僅在順序執行任務時纔有用。在併發執行的情況下,日誌的上下文(哪些任務寫入日誌)不被維護。

我搜索了與此問題相關的主題,但無法找到相關信息。我想了解編寫日誌的最佳實踐和設計,這有助於調試執行流程。我需要知道通過任務和子任務樹執行的流程。

我在Go工作並使用goroutines執行併發任務。由於該語言沒有公開與每個goroutine相關的id(儘管我們可以通過一些黑客獲得id),但我甚至無法將日誌中goroutine的id與之關聯。

回答

1

如果您在日誌記錄中使用線程標識來區分工作,線程標識的實際含義除了按照上下文對日誌進行分組之外沒有任何其他內容。由於Go沒有公開goroutine ID,我建議爲日誌記錄提供一些其他標識符給你的goroutines。想到的是一個任務ID或與你在該例程中進行的實際工作相關的事情。除了應該針對該部分工作的具體情況外,這並不重要。

+0

考慮一下,我有一個任務t1,它有子任務st1,st2,st3。 t1將日誌寫入t1:我正在這樣做 現在啓動st1,st2,st3。 st1寫入日誌爲t1 st1:我這樣做 st3寫入日誌爲t1 st3:我這樣做 st2寫入日誌爲t1 st2:我這樣做 因此,我將在每個任務中維護一個範圍將在寫日誌時使用(獲取父級層次結構任務信息並添加到日誌文本中)。 這種方法好嗎? – Spartan