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將具有來自其他線程的條目。我如何避免這種情況?
恐怕沒有辦法避免它,只能寫入不同的日誌文件(帶有工號的文件名) –
@AndreyRusanov它正在寫入不同的日誌文件。每個「部署」獲得不同的NamedTemporaryFile()。 – fletchowns
我想我已經通過在我的uwsgi ini文件中設置「enable-threads = true」來修復它。 – fletchowns