2012-08-31 34 views
1

如何在Django中配置日誌記錄以默認爲所有WARNING及更高版本的消息使用Sentry,但是當我運行管理命令時將其降至INFO並添加控制檯日誌記錄器?管理命令的單獨日誌記錄

在正常運行時(通過mod_python或uWSGI運行站點),我只關心WARNING及更高版本。然而,我們有一些管理命令,我們通過cronjobs運行,並且我想在日誌文件中收集它們的INFO消息(在管理命令中,但也在更深的代碼中)。一些管理命令來自外部庫,我不想改變它們(在那裏添加額外的初始化)。理想情況下,我想在設置模塊中檢測我們是通過manage.py還是通過WSGI運行。

我目前LOGGING字典的相關部分:

'root': { 
     'level': 'WARNING', 
     'handlers': ['sentry'], 
    }, 
    'handlers': { 
     'console': { 
      'level': 'INFO', 
      'class': 'logging.StreamHandler', 
     }. 
     'sentry': { 
      'level': 'WARNING', 
      'class': 'raven.contrib.django.handlers.SentryHandler', 
     }, 
    }, 

回答

0

一種非常原始的辦法:修改manage.py增加環境的東西,並設置模塊中檢測到這一點。

manage.py

import os 
os.environ['DJANGO_IS_MANAGEMENT_COMMAND'] = '1' 

在設置模塊:

if os.environ.get('DJANGO_IS_MANAGEMENT_COMMAND', False): 
    LOGGING['root']['level'] = 'INFO' 
    LOGGING['root']['handlers'].append('console') 

運行芹菜工作人員時,這也增加了記錄,但我認爲該守護進程沒有標準輸出,所以它不」要緊嗎?

0

您可以對管理命令./manage.py my_task --settings=proj.settings.management使用不同的設置,對吧?所以你可以重寫日誌部分,並從原始設置文件中「繼承」剩下的部分......或者我在你的問題中錯過了一些觀點?

+0

這確實是可能的,但是我需要記住每次都添加這個。我正在尋找一種簡單的方法來檢測Django是通過'manage.py'與另一種方式(很可能是WSGI)來啓動的。 –