2016-04-29 63 views
0

我已經用java編寫了一個應用程序,並將它部署在unix服務器上。 我已經實現了日誌記錄在我的應用程序和記錄在一個文件中生成的說X.log.txt從兩個同時進程記錄

如果我運行使用不同的用戶或單個用戶不同的會話我罐子的多個實例:
是否有機會,我在X.log.txt日誌混合?
還是會以FCFS的方式??


示例:讓P1和P2是兩個正在調用java應用程序並正在生成日誌的進程。

P1和P2將同時寫入其個別日誌至X.log.txt。這個陳述是真實的嗎?還是完全基於CPU調度算法(FCFS,SJF等)?

即使我不使用時間戳它的工作對我來說很好。 當我執行它們時,日誌會一個接一個地產生,意思是對於一個特定的實例,所有的日誌都寫入文件中,然後寫入下一個實例。我的問題仍然是開放的,全部是基於我們的處理器編寫來處理工作的方式,還是其他一些東西?

回答

0

如果兩個進程寫入同一個日誌文件,數據將被隨機破壞。您將在中間切割線,並完成其他日誌中的數據。你甚至可以在文件的不同位置以二進制零爲好,這取決於操作系統(並且在某些操作系統中,它只會無法在同一時間從兩個位置寫入同一文件)。

寫入單獨的文件,然後使用某些第三方工具加入/瀏覽它們以獲取按時間戳排列的視圖。

+0

或通過發送到接受來自多個來源的完整日誌消息並將它們寫入單個日誌文件的日誌記錄進程進行日誌記錄。 (就像'syslog'一樣,因爲OP在Unix系統上)。 –

0

如果你的兩個進程寫入相同的目錄和文件路徑,你會得到一些奇怪的行爲。根據您的實現,兩個應用程序將同時寫入文件,或者一個應用程序將阻止另一個寫入。

我的建議是在運行時生成日誌文件的名稱和追加獨特的像一個時間戳或PID(進程ID)的東西,所以沒有更多的衝突:

X.log.[PID].txtX.log.[TIMESTAMP].txt

注意:必須在時間戳(秒或納秒)內使用足夠低的分辨率來避免名稱衝突。

相關問題