2015-11-24 61 views
0

我有一個自定義的django管理命令,我想捕獲該命令運行時的日誌輸出,並使其可以在單獨的文件中下載。類似於Jenkins中的「控制檯輸出」功能。這個命令是使用django-after-response調用的,我正在運行uWSGI。爲了防止FileHandler記錄器影響其他線程?

在管理命令的開始,我這樣做:

deploy_log = NamedTemporaryFile() 
formatter = logging.Formatter("%(asctime)-15s %(levelname)-8s %(message)s") 
file_handler = logging.FileHandler(deploy_log.name) 
file_handler.setFormatter(formatter) 
file_handler.setLevel(logging.INFO) 
logging.getLogger('').addHandler(file_handler) 

然後在管理命令的末尾:

logging.getLogger('').removeHandler(file_handler) 

我遇到的問題是,當有是同時運行的多個「部署」,一個線程的deploy_log將具有來自其他線程的條目。我如何避免這種情況?

+0

恐怕沒有辦法避免它,只能寫入不同的日誌文件(帶有工號的文件名) –

+0

@AndreyRusanov它正在寫入不同的日誌文件。每個「部署」獲得不同的NamedTemporaryFile()。 – fletchowns

+1

我想我已經通過在我的uwsgi ini文件中設置「enable-threads = true」來修復它。 – fletchowns

回答

0

我相信我找到了解決方案。我有以下添加到我的uwsgi附庸ini文件:

enable-threads = true 

現在日誌文件沒有得到混在一起。