Django 1.3+ के लिए सरल लॉग फ़ाइल उदाहरण


96

रिलीज नोट्स कहते हैं:

Django 1.3 पायथन के लॉगिंग मॉड्यूल के लिए ढांचा-स्तरीय समर्थन जोड़ता है।

वह अच्छा हैं। मैं इसका फायदा उठाना चाहूंगा। दुर्भाग्य से प्रलेखन यह सब मेरे लिए एक चांदी की थाली पर पूरा काम करने वाले उदाहरण कोड के रूप में नहीं सौंपता है जो दर्शाता है कि यह कितना सरल और मूल्यवान है।

मैं इस कायरतापूर्ण नई सुविधा को कैसे सेट करूं कि मैं अपने कोड को काली मिर्च के साथ जोड़ सकूं

logging.debug('really awesome stuff dude: %s' % somevar)

और फ़ाइल "/tmp/application.log" को देखें

18:31:59 Apr 21 2011 awesome stuff dude: foobar
18:32:00 Apr 21 2011 awesome stuff dude: foobar
18:32:01 Apr 21 2011 awesome stuff dude: foobar

डिफ़ॉल्ट पायथन लॉगिंग और इस 'फ्रेमवर्क-स्तरीय समर्थन' में क्या अंतर है?

जवाबों:


183

मैं वास्तव में यह बहुत प्यार करता हूँ यहाँ आपके काम करने का उदाहरण है! सच में यह बहुत बढ़िया है!

इसे अपने में डालकर शुरू करें settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': SITE_ROOT + "/logfile",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'MYAPP': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    }
}

अब इस सबका क्या मतलब है?

  1. स्वरूपकों को मैं पसंद करता हूं कि यह उसी शैली के रूप में सामने आए जैसा कि /manage.py runserver
  2. हैंडलर - मुझे दो लॉग चाहिए - एक डिबग टेक्स्ट फ़ाइल, और एक सूचना कंसोल। यह मुझे वास्तव में खुदाई करने की अनुमति देता है (यदि आवश्यक हो) और हुड के नीचे क्या होता है यह देखने के लिए एक पाठ फ़ाइल देखें।
  3. लकड़हारे - यहाँ वह जगह है जहाँ हम नीचे उतरना चाहते हैं। सामान्य तौर पर django को WARN और उससे ऊपर - अपवाद मिलता है (इसलिए प्रचारित) वह बैकएंड है जहां मैं SQL कॉल देखना पसंद करता हूं क्योंकि वे पागल हो सकते हैं .. अंतिम मेरा ऐप था मेरे पास दो हैंडलर हैं और इसे सब कुछ पुश करें।

अब मैं इसका उपयोग करने के लिए MYAPP को कैसे सक्षम करूं ...

प्रलेखन के अनुसार यह आपकी फ़ाइलों के शीर्ष पर रखा गया है (view.py) ।।

import logging
log = logging.getLogger(__name__)

फिर कुछ करने के लिए ऐसा करते हैं।

log.debug("Hey there it works!!")
log.info("Hey there it works!!")
log.warn("Hey there it works!!")
log.error("Hey there it works!!")

लॉग स्तर यहां और शुद्ध अजगर के लिए यहां बताए गए हैं


7
मैंने उपरोक्त चरणों का पालन किया। फ़ाइल बनाई गई है, लेकिन इसके लिए कुछ भी नहीं लिखा गया है। दलीलों की मदद
विवेक एस

12
@InternalServerError आपको लकड़ियों के अनुभाग में अपने ऐप के नाम के साथ MYAPP को बदलना होगा।
रोज

9
बिलकुल! Replace MYAPP ’को
rh0dium

10
स्पष्टीकरण, जो कुछ भी आप में लकड़हारा फोन के लिए settings.py, यानी MYAPPइस उदाहरण में, यह भी करने के लिए कॉल में पैरामीटर होना है logging.getLogger। इसलिए, यदि आपकी परियोजना में कई स्व-निहित ऐप हैं और आप चाहते हैं कि आप एक आम logging.getLogger('MYAPP')logging.getLogger(__name__)
लकड़हारे

3
यह बहुत अच्छा काम करता है। 'क्लास' का इस्तेमाल किया था: क्योंकि 'django.utils.log.NullHandler' अब मान्य नहीं है 'logging.NullHandler', लेकिन बाकी में 1.11 मेरे लिए काम किया
JacquelineIO

4

प्रवेश config rh0dium ने सुझाव दिया और पर आंशिक रूप से आधारित कुछ और अनुसंधान - मैं अपने आप को किया था, मैं अच्छा प्रवेश चूक के साथ एक उदाहरण Django परियोजना कोडांतरण शुरू कर दिया असफल-अच्छी तरह से-Django

नमूना लॉगफाइल आउटपुट:

2016-04-05 22:12:32,984 [Thread-1    ] [INFO ] [djangoproject.logger]  This is a manually logged INFO string.
2016-04-05 22:12:32,984 [Thread-1    ] [DEBUG] [djangoproject.logger]  This is a manually logged DEBUG string.
2016-04-05 22:12:32,984 [Thread-1    ] [ERROR] [django.request      ]  Internal Server Error: /
Traceback (most recent call last):
  File "/Users/kermit/.virtualenvs/fail-nicely-django/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/kermit/.virtualenvs/fail-nicely-django/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/kermit/projekti/git/fail-nicely-django/djangoproject/brokenapp/views.py", line 12, in brokenview
    raise Exception('This is an exception raised in a view.')
Exception: This is an exception raised in a view.

विस्तृत उपयोग को README में समझाया गया है , लेकिन अनिवार्य रूप से, आप अपने Django प्रोजेक्ट में लकड़हारा मॉड्यूल को कॉपी करते हैं और from .logger import LOGGINGअपनी सेटिंग्स के नीचे जोड़ते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.