2017-11-21 27 views
7

हमारे Django वेब अनुप्रयोग देता है एक 404 है, तो हम लॉग में यह देखें:अजगर लॉगिंग: बदलें "चेतावनी" के लिए "जानकारी" के

2017-11-21 12:48:26 django.request.get_response: WARNING Not Found: /foooooo 

मैं इस विशेष get_response द्वारा बनाई गई लाइन को बदलना चाहते हैं() WARN से INFO तक।

Django और Python के साथ इसे कैसे कॉन्फ़िगर करें?

इस विकल्प को अनदेखा करने का एक वैकल्पिक समाधान होगा, लेकिन जानकारी के लिए चेतावनी को प्राथमिकता दी जाएगी।

+0

पर इस फिल्टर और फिल्टर सेट जोड़ने आप "अपने दम पर इस हल कर सकते हैं", तो IMO मेरा उत्तर पर्याप्त होता है उस मानसिकता के साथ किसी को पाने के लिए विस्तार सही ट्रैक शुरू कर दिया। –

उत्तर

10

आप इसे आसानी से नहीं कर सकते हैं, क्योंकि Django डेवलपर्स ने फैसला किया है कि यह विशेष घटना WARNING के रूप में वर्गीकृत होने के लिए पर्याप्त महत्वपूर्ण है।

हालांकि, अगर आप यह INFO में बदल सकते हैं जब एक लॉग के लिए लिख, एक logging.Filter उपवर्ग जो INFO को WARNING से LogRecord में स्तर बदल जाता है या पूरी तरह संदेश को फ़िल्टर कर देता का एक उदाहरण जोड़कर।

फ़िल्टर किसी भी हैंडलर में जोड़ा जाना चाहिए जिसका आउटपुट इस तरह से बदला जाना चाहिए। यह मानक Django लॉगिंग कॉन्फ़िगरेशन तंत्र का उपयोग करके किया जा सकता है।

+0

मुझे लगता है कि मैं इसे अपने आप हल कर सकता हूं। दूसरी तरफ मुझे लगता है कि 10 डेवलपर्स इसे 10 अलग-अलग तरीकों से करेंगे। सबसे पाइथनिक तरीका कौन सा है? – guettli

3

सबसे पहले LOGGING में उसके बाद लकड़हारा फिल्टर

def change_404_level_to_INFO(record): 
    if record.status_code == 404: 
     record.levelname = 'INFO' 
    return True 

बनाने लकड़हारा

LOGGING = { 
.... 
    'filters': { 
     'change_404_to_INFO': { 
      '()': 'django.utils.log.CallbackFilter', 
      'callback': change_404_to_INFO`, 
     }, 
    }, 
.... 
    'loggers': { 
     'django.request': { 
      'handlers': ['console',], 
      'level': 'DEBUG', 
      'propagate: False, 
      'filters': ['change_404_to_INFO'], 
     }, 
    } 
.... 
} 
संबंधित मुद्दे