减少 http 请求、上下文管理器或自定义日志记录级别的日志噪声?
Reducing log noise for http requests, contextmanager or custom logging level?
我有一个记录器,用于我设置为 logging.INFO
的大部分程序。这对我来说似乎是最合理的设置,因为我记录的内容不一定是警告等......问题是,requests
和 urllib
对他们的每个 HTTP 使用 logging.INFO
要求。这会为我的一些 ETL 过程创建超长日志,而且它不一定有任何帮助。
我在考虑两个解决方案,第一个是创建一个上下文管理函数,在没有有用日志信息的 ETL 部分将脚本的整体级别设置为 logging.WARNING
。另一个选项是在 logging.INFO
和 logging.WARNING
之间创建自定义日志记录级别。哪个更可重用并且更有效地工作?
当我配置我的记录器时,我总是添加 logging.getLogger('requests').propagate = False
以避免 污染 我的来自请求库的日志记录。
例如:
def init_logger(config_file=None, log_level=logging.INFO):
# Configure the logging system
if config_file:
logging.config.fileConfig(config_file, disable_existing_loggers=False)
else:
logging.basicConfig(level=log_level)
# Avoid output from the requests module
logging.getLogger('requests').propagate = False
def main():
init_logger(…)
if __name__ == '__main__':
main()
我有一个记录器,用于我设置为 logging.INFO
的大部分程序。这对我来说似乎是最合理的设置,因为我记录的内容不一定是警告等......问题是,requests
和 urllib
对他们的每个 HTTP 使用 logging.INFO
要求。这会为我的一些 ETL 过程创建超长日志,而且它不一定有任何帮助。
我在考虑两个解决方案,第一个是创建一个上下文管理函数,在没有有用日志信息的 ETL 部分将脚本的整体级别设置为 logging.WARNING
。另一个选项是在 logging.INFO
和 logging.WARNING
之间创建自定义日志记录级别。哪个更可重用并且更有效地工作?
当我配置我的记录器时,我总是添加 logging.getLogger('requests').propagate = False
以避免 污染 我的来自请求库的日志记录。
例如:
def init_logger(config_file=None, log_level=logging.INFO):
# Configure the logging system
if config_file:
logging.config.fileConfig(config_file, disable_existing_loggers=False)
else:
logging.basicConfig(level=log_level)
# Avoid output from the requests module
logging.getLogger('requests').propagate = False
def main():
init_logger(…)
if __name__ == '__main__':
main()