python सार्वजनिक - मैं अनुरोध पुस्तकालय से लॉग संदेश कैसे अक्षम करूं?




वर्ष क्या (9)

सरल: केवल import requests बाद requests.packages.urllib3.disable_warnings() जोड़ें

डिफ़ॉल्ट रूप से, Requests पाइथन लाइब्रेरी कंसोल पर लॉग संदेश लिखता है, इनके साथ:

Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606

मुझे आमतौर पर इन संदेशों में दिलचस्पी नहीं है, और उन्हें अक्षम करना चाहते हैं। उन संदेशों को चुप करने या अनुरोधों की शब्दावली को कम करने का सबसे अच्छा तरीका क्या होगा?


मुझे यकीन नहीं है कि पिछले दृष्टिकोणों ने काम करना बंद कर दिया है, लेकिन किसी भी मामले में, यहां चेतावनियों को हटाने का एक और तरीका है:

PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py

असल में, स्क्रिप्ट निष्पादन के संदर्भ में एक पर्यावरण चर जोड़ना।

प्रलेखन से: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings


अगर आपके पास कॉन्फ़िगरेशन फ़ाइल है, तो आप इसे कॉन्फ़िगर कर सकते हैं।

लॉगर्स अनुभाग में urllib3 जोड़ें:

[loggers]
keys = root, urllib3

Logger_urllib3 अनुभाग जोड़ें:

[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool

import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

इस प्रकार urllib3 से स्तर = INFO के सभी संदेश लॉगफाइल में मौजूद नहीं होंगे।

तो आप अपने लॉग संदेशों के लिए स्तर = INFO का उपयोग करना जारी रख सकते हैं ... बस उस लाइब्रेरी के लिए इसे संशोधित करें जिसका आप उपयोग कर रहे हैं।


यदि आप यहां किसी भी (संभावित रूप से गहराई से घोंसला वाले) मॉड्यूल के लॉगिंग को संशोधित करने का एक तरीका ढूंढ रहे हैं, तो लॉगिंग का उपयोग करें। logging.Logger.manager.loggerDict ऑब्जेक्ट्स का एक शब्दकोश प्राप्त करने के लिए डिक्ट करें, जिसे आप logging.getLogger लिए तर्क के रूप में उपयोग कर सकते हैं logging.getLogger :

import requests
import logging
for key in logging.Logger.manager.loggerDict:
    print(key)
# requests.packages.urllib3.connectionpool
# requests.packages.urllib3.util
# requests.packages
# requests.packages.urllib3
# requests.packages.urllib3.util.retry
# PYREADLINE
# requests
# requests.packages.urllib3.poolmanager

logging.getLogger('requests').setLevel(logging.CRITICAL)
# Could also use the dictionary directly:
# logging.Logger.manager.loggerDict['requests'].setLevel(logging.CRITICAL)

मुझे आपके जैसे समस्या होने के बाद, या दो सप्ताह पहले मैंने जो प्रलेखन अनुभाग लिखा था उसे कॉपी / पेस्ट करने दें:

import requests
import logging

# these two lines enable debugging at httplib level (requests->urllib3->httplib)
# you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# the only thing missing will be the response.body which is not logged.
import httplib
httplib.HTTPConnection.debuglevel = 1

logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

requests.get('http://httpbin.org/headers')

logging.config.dictConfig का उपयोग कर किसी के लिए आप इस तरह के शब्दकोश में अनुरोध लाइब्रेरी लॉग स्तर को बदल सकते हैं:

'loggers': {
    '': {
        'handlers': ['file'],
        'level': level,
        'propagate': False
    },
    'requests.packages.urllib3': {
        'handlers': ['file'],
        'level': logging.WARNING
    }
}

लॉग संदेश उत्पन्न करने वाले लॉगजर को खोजने पर क्रब्रोज का मार्गदर्शन बेहद उपयोगी था। मेरे Django प्रोजेक्ट के लिए, मुझे 120 अलग-अलग लॉगर्स को सॉर्ट करना पड़ा जब तक कि मुझे पता चला कि यह elasticsearch पाइथन लाइब्रेरी थी जो मेरे लिए समस्याएं पैदा कर रही थी। अधिकांश प्रश्नों में मार्गदर्शन के अनुसार, मैंने इसे अपने लॉगर्स में जोड़कर अक्षम कर दिया:

      ...
      'elasticsearch': {
          'handlers': ['console'],
          'level': logging.WARNING,
      },     
      ...

अगर किसी और को अनुपयोगी लॉग संदेश दिखाई दे रहे हैं तो यहां पोस्ट करना जब भी वे लोचदार खोज क्वेरी चलाते हैं।


>>> a = '&#'
>>> print a.replace('&', r'\&')
\&#
>>> print a.replace('#', r'\#')
&\#
>>> 

आप 'कच्ची' स्ट्रिंग का उपयोग करना चाहते हैं ('आर' प्रतिस्थापन स्ट्रिंग को उपसर्ग करने के द्वारा निर्दिष्ट '), चूंकि कच्चे तार विशेष रूप से बैकस्लैश का इलाज नहीं करते हैं।





python logging python-requests verbosity