2010-08-18 68 views
2

我有幾個並行運行的python程序。 我想寫一個python程序來管理程序日誌,這意味着其他程序會發送日誌消息到這個程序,程序會將它寫入日誌文件。 另一個重要的特點是,如果其中一個程序崩潰,'管理日誌程序'會知道它並可以將它寫入日誌文件。 我嘗試使用此示例http://docs.python.org/library/logging.html#sending-and-receiving-logging-events-across-a-network 但我失敗了。python日誌管理器

任何人都可以幫我嗎?

+3

不無碼,我們不能。我可能會在您對操作的思考中看到問題:您將流程管理器與日誌管理器區分開來。這兩個任務最好由一個進程管理器來處理,該進程管理器產生工作進程,監視它們的狀態,根據需要重啓它們,還**從在子進程創建時建立的管道彙集它們的日誌消息。研究Python多處理模塊,獲得正確的過程監督,然後記錄應該更容易。 – msw 2010-08-18 06:56:52

回答

1

我寫了一個python logger,可以做到這一點(即使有mpi支持)。 它可在https://github.com/JensTimmerman/VSC-tools/blob/master/vsc/fancylogger.py

此記錄器可以登錄到遠程計算機上的udp端口。

在那裏,我跑,收集日誌,並把它們寫入到文件守護進程: https://github.com/JensTimmerman/VSC-tools/blob/master/bin/logdaemon.py

這個腳本會爲您啓動守護程序: https://github.com/JensTimmerman/VSC-tools/blob/master/bin/startlogdaemon.sh

如果然後啓動你的Python程序和運行它們與mpi並行例如,您將只需要使用fancylogger.getLogger()並將其用作普通的Python記錄器。 它會選取用腳本設置的環境變量,登錄到該服務器,並在日誌記錄中添加一些額外的mpi信息。 (如MPI線程號)

如果不使用MPI您將有兩個選擇:

  • 手動設置「FANCYLOG_SERVER」和「FANCYLOG_SERVER_PORT」變量在每次你開始遠程蟒蛇殼進程

  • 或者只是啓動守護進程。而在Python腳本讓你記錄

這樣的:

import fancylogger 
fancylogger.logToUDP(hostname, port=5005) 
logger = fancylogger.getLogger()