[2.1.x] Restored django.test.utils.patch_logger() for backwards compatibility.

Added back after 607970f31c.

Backport of 8dcd43ce06 from master
This commit is contained in:
Jon Dufresne 2018-06-11 18:12:33 -07:00 committed by Tim Graham
parent add57c7e27
commit a7cdf7aafc
1 changed files with 23 additions and 0 deletions

View File

@ -634,6 +634,29 @@ class ignore_warnings(TestContextDecorator):
self.catch_warnings.__exit__(*sys.exc_info())
@contextmanager
def patch_logger(logger_name, log_level, log_kwargs=False):
"""
Context manager that takes a named logger and the logging level
and provides a simple mock-like list of messages received.
Use unitttest.assertLogs() if you only need Python 3 support. This
private API will be removed after Python 2 EOL in 2020 (#27753).
"""
calls = []
def replacement(msg, *args, **kwargs):
call = msg % args
calls.append((call, kwargs) if log_kwargs else call)
logger = logging.getLogger(logger_name)
orig = getattr(logger, log_level)
setattr(logger, log_level, replacement)
try:
yield calls
finally:
setattr(logger, log_level, orig)
# On OSes that don't provide tzset (Windows), we can't set the timezone
# in which the program runs. As a consequence, we must skip tests that
# don't enforce a specific timezone (with timezone.override or equivalent),