""" This module is kept to provide a helpful warning about its removal. """ import logging import warnings from twisted.python.failure import Failure from scrapy.exceptions import ScrapyDeprecationWarning from scrapy.utils.log import failure_to_exc_info logger = logging.getLogger(__name__) warnings.warn("Module `scrapy.log` has been deprecated, Scrapy now relies on " "the builtin Python library for logging. Read the updated " "logging entry in the documentation to learn more.", ScrapyDeprecationWarning, stacklevel=2) # Imports and level_names variable kept for backwards-compatibility DEBUG = logging.DEBUG INFO = logging.INFO WARNING = logging.WARNING ERROR = logging.ERROR CRITICAL = logging.CRITICAL SILENT = CRITICAL + 1 level_names = { logging.DEBUG: "DEBUG", logging.INFO: "INFO", logging.WARNING: "WARNING", logging.ERROR: "ERROR", logging.CRITICAL: "CRITICAL", SILENT: "SILENT", } def msg(message=None, _level=logging.INFO, **kw): warnings.warn('log.msg has been deprecated, create a python logger and ' 'log through it instead', ScrapyDeprecationWarning, stacklevel=2) level = kw.pop('level', _level) message = kw.pop('format', message) # NOTE: logger.log doesn't handle well passing empty dictionaries with format # arguments because of some weird use-case: # https://hg.python.org/cpython/file/648dcafa7e5f/Lib/logging/__init__.py#l269 logger.log(level, message, *[kw] if kw else []) def err(_stuff=None, _why=None, **kw): warnings.warn('log.err has been deprecated, create a python logger and ' 'use its error method instead', ScrapyDeprecationWarning, stacklevel=2) level = kw.pop('level', logging.ERROR) failure = kw.pop('failure', _stuff) or Failure() message = kw.pop('why', _why) or failure.value logger.log(level, message, *[kw] if kw else [], exc_info=failure_to_exc_info(failure))