2016-09-28 99 views
1

我需要創建一個可以在我的python包中使用的單個記錄器,但是其中一些函數實現了多處理。我希望所有這些函數都像其他所有函數一樣寫入相同的日誌文件。使用多處理模塊記錄

我知道在Python 3.2+有一個內置的方式來做到這一點,但我需要支持端口到Python 2.7.x以及。

有什麼代碼可以很好地處理日誌中的多處理和非多處理功能嗎?

通常情況下,我會創建一個日誌這樣:

module = sys.modules['__main__'].__file__ 
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, 
       format='%(name)s (%(levelname)s): %(message)s') 
log = logging.getLogger(module) 
fh = RotatingFileHandler(arguments.o, mode='a', maxBytes=2*1024*1024, 
         backupCount=2, encoding=None, delay=0) 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - % (message)s') 
fh.setFormatter(formatter) 
fh.setLevel(logging.DEBUG) 
log.addHandler(fh) 

然後輸出將寫入到一個文件中。它工作的很好,但是當我實現這個時,這段代碼會創建多個文件,這是我不想要的。

任何想法?

謝謝

+1

你是否把這個代碼放在通常的'if __name__ =='__main __':'conditional?請記住,當使用'multiprocessing'時,不是導入或函數/類定義的** everything **應該在那裏。 – Bakuriu

+0

@Bakuriu - 我正在做模塊級別的日誌創建,因爲這是一個python包。 –

回答

0

做到這一點在Python> = 3.2的功能(通過QueueHandlerQueueListener類,如所描述here)可用於在Python 2.7通過logutils項目。

+0

謝謝你。這可以用來將消息寫入單個日誌文件嗎? –

+0

所以當我嘗試將日誌文件傳遞給多處理器時,它會拋出一個pickle錯誤,你能提供一個簡單的例子來說明如何使用這個工具嗎? –

+0

@ josh1234我鏈接的帖子有一個工作示例。 –