从 Python class 中的静态方法全局打开 httplib 日志记录?
Turn on httplib logging globally from a static method in a Python class?
我有这个 class 可以为请求使用的 httplib 库打开详细日志记录。我想在 运行 任何请求代码之前调用它并打开日志记录。但是,在我调用它之后,日志记录没有打开。如果我从静态方法中取出代码并将其放在主 python 文件和 运行 中的函数中,那么它就可以工作了。但是我希望它被打包成一个 class 和一个静态方法。
import logging
import http.client
class HttpClientUtilities:
@staticmethod
def enable_logging(level=logging.DEBUG):
global http
httpclient_logger = logging.getLogger("http.client")
"""Enable HTTPConnection debug logging to the logging framework"""
def httpclient_log(*args):
httpclient_logger.log(level, " ".join(args))
# mask the print() built-in in the http.client module to use
# logging instead
http.client.print = httpclient_log
# enable debugging
http.client.HTTPConnection.debuglevel = 1
我这样称呼它:
from HttpClientUtilities import HttpClientUtilities
HttpClientUtilities.enable_logging()
#then here i run some methods from other classes which use the requests library
在 enable_logging 方法中我使用了全局 http 所以它应该引用全局 http 对象...
我在这里找到了一个更简单的解决方案:
通过覆盖默认调试级别:
# You'll need to do this before urllib3 creates any http connection objects
import http.client
http.client.HTTPConnection.debuglevel = 5
我有这个 class 可以为请求使用的 httplib 库打开详细日志记录。我想在 运行 任何请求代码之前调用它并打开日志记录。但是,在我调用它之后,日志记录没有打开。如果我从静态方法中取出代码并将其放在主 python 文件和 运行 中的函数中,那么它就可以工作了。但是我希望它被打包成一个 class 和一个静态方法。
import logging
import http.client
class HttpClientUtilities:
@staticmethod
def enable_logging(level=logging.DEBUG):
global http
httpclient_logger = logging.getLogger("http.client")
"""Enable HTTPConnection debug logging to the logging framework"""
def httpclient_log(*args):
httpclient_logger.log(level, " ".join(args))
# mask the print() built-in in the http.client module to use
# logging instead
http.client.print = httpclient_log
# enable debugging
http.client.HTTPConnection.debuglevel = 1
我这样称呼它:
from HttpClientUtilities import HttpClientUtilities
HttpClientUtilities.enable_logging()
#then here i run some methods from other classes which use the requests library
在 enable_logging 方法中我使用了全局 http 所以它应该引用全局 http 对象...
我在这里找到了一个更简单的解决方案:
通过覆盖默认调试级别:
# You'll need to do this before urllib3 creates any http connection objects
import http.client
http.client.HTTPConnection.debuglevel = 5