Commit 6b377196 authored by Tim Graham's avatar Tim Graham
Browse files

Refs #24526 -- Made the django logger handle INFO messages.

Without an explicit 'level', only messages at WARNING or higher
are handled. This makes the config consistent with the docs
which say, "The django catch-all logger sends all messages at
the INFO level or higher to the console."
parent 7cb3a488
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ DEFAULT_LOGGING = {
    'loggers': {
        'django': {
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
        },
        'py.warnings': {
            'handlers': ['console'],
+2 −1
Original line number Diff line number Diff line
@@ -827,7 +827,8 @@ Changes to the default logging configuration

To make it easier to write custom logging configurations, Django's default
logging configuration no longer defines 'django.request' and 'django.security'
loggers. Instead, it defines a single 'django' logger with two handlers:
loggers. Instead, it defines a single 'django' logger, filtered at the ``INFO``
level, with two handlers:

* 'console': filtered at the ``INFO`` level and only active if ``DEBUG=True``.
* 'mail_admins': filtered at the ``ERROR`` level and only active if
+29 −1
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import warnings

from admin_scripts.tests import AdminScriptTestCase

from django.conf import settings
from django.core import mail
from django.core.files.temp import NamedTemporaryFile
from django.test import RequestFactory, SimpleTestCase, override_settings
@@ -13,7 +14,8 @@ from django.test.utils import LoggingCaptureMixin, patch_logger
from django.utils.deprecation import RemovedInNextVersionWarning
from django.utils.encoding import force_text
from django.utils.log import (
    AdminEmailHandler, CallbackFilter, RequireDebugFalse, RequireDebugTrue,
    DEFAULT_LOGGING, AdminEmailHandler, CallbackFilter, RequireDebugFalse,
    RequireDebugTrue,
)
from django.utils.six import StringIO

@@ -67,6 +69,17 @@ class LoggingFiltersTest(SimpleTestCase):

class DefaultLoggingTest(LoggingCaptureMixin, SimpleTestCase):

    @classmethod
    def setUpClass(cls):
        super(DefaultLoggingTest, cls).setUpClass()
        cls._logging = settings.LOGGING
        logging.config.dictConfig(DEFAULT_LOGGING)

    @classmethod
    def tearDownClass(cls):
        super(DefaultLoggingTest, cls).tearDownClass()
        logging.config.dictConfig(cls._logging)

    def test_django_logger(self):
        """
        The 'django' base logger only output anything when DEBUG=True.
@@ -78,6 +91,21 @@ class DefaultLoggingTest(LoggingCaptureMixin, SimpleTestCase):
            self.logger.error("Hey, this is an error.")
            self.assertEqual(self.logger_output.getvalue(), 'Hey, this is an error.\n')

    def test_django_logger_warning(self):
        with self.settings(DEBUG=True):
            self.logger.warning('warning')
            self.assertEqual(self.logger_output.getvalue(), 'warning\n')

    def test_django_logger_info(self):
        with self.settings(DEBUG=True):
            self.logger.info('info')
            self.assertEqual(self.logger_output.getvalue(), 'info\n')

    def test_django_logger_debug(self):
        with self.settings(DEBUG=True):
            self.logger.debug('debug')
            self.assertEqual(self.logger_output.getvalue(), '')


class WarningLoggerTests(SimpleTestCase):
    """
+2 −1
Original line number Diff line number Diff line
#!/usr/bin/env python
import atexit
import copy
import logging
import os
import shutil
@@ -154,7 +155,7 @@ def setup(verbosity, test_labels, parallel):
        'contenttypes': 'contenttypes_tests.migrations',
        'sessions': 'sessions_tests.migrations',
    }
    log_config = DEFAULT_LOGGING
    log_config = copy.deepcopy(DEFAULT_LOGGING)
    # Filter out non-error logging so we don't have to capture it in lots of
    # tests.
    log_config['loggers']['django']['level'] = 'ERROR'