2014-02-12 94 views
2

我在我的Django項目中設置了日誌記錄。它在本地開發但在生產中造成麻煩。 settings.py位如下:Django日誌記錄 - 未找到處理程序的日誌文件

import os 

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) 

. . . 

'handlers': { 
    'log_file': { 
     'level': 'INFO', 
     'class': 'logging.handlers.RotatingFileHandler', 
     'filename': os.path.join(PROJECT_PATH, 'logs/django.log'), 
     'maxBytes': '16777216', 
     'formatter': 'verbose' 
    }, 

. . . 

我不斷收到此錯誤/var/log/apache2/error.log

ValueError: Unable to configure handler 'log_file': [Errno 2] No such file or directory: '/logs/django.log' 

我已經通過運行代碼和手動設置PROJECT_PATH在Django的殼測試這一點,它似乎返回正確的道路。另外,我檢查並檢查了日誌文件的權限。儘管沒有必要,但我將它改爲777只是爲了測試。仍然沒有運氣。

我的本地日誌填滿了我期望的所有內容,而生產日誌爲空。

考慮到這一點,我認爲這個日誌位置可能不是最好的,但如果它在生產中起作用,至少我會知道......然後,我可以改變位置。

我錯過了什麼?

+0

用戶是否有效並可寫入「/ logs/django.log」路徑? – arocks

+0

當前,Apache用戶是'www-data',所有權爲'root:www-data',權限設置爲'775'。但是我已經測試過不同的所有權和'777'權限,正如原始問題所示。 – nicorellius

回答

3

雖然我真的想得到一個答案,我決定採取另一種方法,所以我可以繼續前進。看起來這個問題沒有引起足夠的重視,現在我不覺得自己是一個賞金者,所以現在我禁用了日誌記錄。無論如何,我會重新設計我的方法,所以這看起來像一個體面的想法。

我想出了暫時似乎工作,不給錯誤是這樣的(用於文件處理程序定義):

'file': { 
    'level': 'DEBUG', 
    'class': 'logging.FileHandler', 
    'filename': '/some/fixed/path/to/logs/django.log', 
}, 

請注意,我用的是從os.path.join(PROJECT_PATH, 'logs/django.log')得到的值了。不知道爲什麼這不起作用,但它是罪魁禍首。所以即使這一點是正確的:PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))(甚至在python shell中已經確認),它在生產中不起作用。

+0

我遇到了同樣的問題。你是在嵌入式還是守護進程模式下運行? – skzryzg

+0

不處於守護進程模式...似乎每當我從開發到我的Apache服務器(使用'mod_wsgi'),我遇到了這個問題。有趣的是,我總是首先懷疑權限,並修復這些無濟於事......我認爲這與我的路徑有關。我通常設置類似於'PROJECT_ROOT = os.path.abspath(os.path.dirname(__ name __))',並在我所有的路徑中使用它。這可能是由於我的服務器配置。 – nicorellius

相關問題