मुझे पता है कि यह पहले से ही हल किया हुआ उत्तर है, लेकिन django> = 1.3 के अनुसार एक नई लॉगिंग सेटिंग है।
पुराने से नए में जाना स्वचालित नहीं है, इसलिए मैंने सोचा कि मैं इसे यहाँ लिखूंगा।
और निश्चित रूप से कुछ और के लिए django डॉक्टर चेकआउट करें ।
यह मूल अंतर है, जो डिफ़ॉल्ट रूप से django-admin createproject v1.3 के साथ बनाया गया है - माइलेज नवीनतम dalango संस्करणों के साथ बदल सकता है:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
}
}
}
यह संरचना मानक अजगर लॉगिंग तानाशाह पर आधारित है , जो निम्न ब्लॉकों को निर्धारित करता है:
मैं आमतौर पर कम से कम यह करता हूं:
- एक .log फ़ाइल जोड़ें
- इस लॉग में लिखने के लिए मेरे ऐप्स कॉन्फ़िगर करें
जो इसमें अनुवाद करता है:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'null': {
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'console':{
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
# I always add this handler to facilitate separating loggings
'log_file':{
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(VAR_ROOT, 'logs/django.log'),
'maxBytes': '16777216', # 16megabytes
'formatter': 'verbose'
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'apps': { # I keep all my of apps under 'apps' folder, but you can also add them one by one, and this depends on how your virtualenv/paths are set
'handlers': ['log_file'],
'level': 'INFO',
'propagate': True,
},
},
# you can also shortcut 'loggers' and just configure logging for EVERYTHING at once
'root': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO'
},
}
संपादित करें
अनुरोध देखें अपवाद अब हमेशा लॉग इन होते हैं और टिकट # 16288 :
मैंने उपर्युक्त नमूने के अद्यतन को स्पष्ट रूप से mail_admins के लिए सही फ़िल्टर शामिल किया है ताकि डिफ़ॉल्ट रूप से, जब डिबग सत्य हो तो ईमेल नहीं भेजे जाएं।
आपको एक फ़िल्टर जोड़ना चाहिए:
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
और इसे mail_admins हैंडलर पर लागू करें:
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
}
अन्यथा django.core.handers.base.handle_uncaught_exception
सेटिंग्स'BJU 'सही है, तो' django.request 'लकड़हारे के लिए त्रुटियों को पारित नहीं करता है।
यदि आप Django 1.5 में ऐसा नहीं करते हैं तो आपको एक मिल जाएगा
DeprecationWarning: आपके पास 'mail_admins' लॉगिंग हैंडलर पर परिभाषित कोई फ़िल्टर नहीं है: निहित डिबग-झूठी-केवल फ़िल्टर जोड़ना
लेकिन चीजें अभी भी सही तरीके से काम करेगी django 1.4 और django 1.5 में।
** अंत संपादित करें **
यह मान django doc में नमूना कॉन्फिडेंस से दृढ़ता से प्रेरित है, लेकिन लॉग फ़ाइल भाग को जोड़ रहा है।
मैं अक्सर निम्नलिखित कार्य भी करता हूं:
LOG_LEVEL = 'DEBUG' if DEBUG else 'INFO'
...
'level': LOG_LEVEL
...
तब मेरे अजगर कोड में मैं हमेशा एक NullHandler जोड़ देता हूं यदि कोई लॉगिंग कॉन्फिडेंस परिभाषित नहीं होता है। यह निर्दिष्ट नहीं हैंडलर के लिए चेतावनी से बचें। विशेष रूप से उन कामों के लिए उपयोगी जो केवल Django ( रेफ ) में जरूरी नहीं हैं
import logging
# Get an instance of a logger
logger = logging.getLogger(__name__)
class NullHandler(logging.Handler): #exists in python 3.1
def emit(self, record):
pass
nullhandler = logger.addHandler(NullHandler())
# here you can also add some local logger should you want: to stdout with streamhandler, or to a local file...
[...]
logger.warning('etc.etc.')
उम्मीद है की यह मदद करेगा!