Loading django/conf/__init__.py +10 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ variable, and then from django.conf.global_settings; see the global settings fil a list of all possible variables. """ import logging import os import time # Needed for Windows import warnings Loading Loading @@ -55,6 +56,15 @@ class LazySettings(LazyObject): """ Setup logging from LOGGING_CONFIG and LOGGING settings. """ try: # Route warnings through python logging logging.captureWarnings(True) # Allow DeprecationWarnings through the warnings filters warnings.simplefilter("default", DeprecationWarning) except AttributeError: # No captureWarnings on Python 2.6, DeprecationWarnings are on anyway pass if self.LOGGING_CONFIG: from django.utils.log import DEFAULT_LOGGING # First find the logging configuration function ... Loading django/utils/log.py +3 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,9 @@ DEFAULT_LOGGING = { 'level': 'ERROR', 'propagate': False, }, 'py.warnings': { 'handlers': ['console'], }, } } Loading docs/releases/1.5.txt +7 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,13 @@ Django 1.5 also includes several smaller improvements worth noting: :attr:`~django.db.models.Options.index_together` documentation for more information. * During Django's logging configuration verbose Deprecation warnings are enabled and warnings are captured into the logging system. Logged warnings are routed through the ``console`` logging handler, which by default requires :setting:`DEBUG` to be True for output to be generated. The result is that DeprecationWarnings should be printed to the console in development environments the way they have been in Python versions < 2.7. Backwards incompatible changes in 1.5 ===================================== Loading tests/regressiontests/logging_tests/tests.py +29 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ from __future__ import unicode_literals import copy import logging import sys import warnings from django.conf import compat_patch_logging_config, LazySettings Loading @@ -10,9 +11,11 @@ from django.test import TestCase, RequestFactory from django.test.utils import override_settings from django.utils.log import CallbackFilter, RequireDebugFalse from django.utils.six import StringIO from django.utils.unittest import skipUnless from ..admin_scripts.tests import AdminScriptTestCase PYVERS = sys.version_info[:2] # logging config prior to using filter with mail_admins OLD_LOGGING = { Loading Loading @@ -131,6 +134,32 @@ class DefaultLoggingTest(TestCase): self.logger.error("Hey, this is an error.") self.assertEqual(output.getvalue(), 'Hey, this is an error.\n') @skipUnless(PYVERS > (2,6), "warnings captured only in Python >= 2.7") class WarningLoggerTests(TestCase): """ Tests that warnings output for DeprecationWarnings is enabled and captured to the logging system """ def setUp(self): self.logger = logging.getLogger('py.warnings') self.old_stream = self.logger.handlers[0].stream def tearDown(self): self.logger.handlers[0].stream = self.old_stream @override_settings(DEBUG=True) def test_warnings_capture(self): output = StringIO() self.logger.handlers[0].stream = output warnings.warn('Foo Deprecated', DeprecationWarning) self.assertTrue('Foo Deprecated' in output.getvalue()) def test_warnings_capture_debug_false(self): output = StringIO() self.logger.handlers[0].stream = output warnings.warn('Foo Deprecated', DeprecationWarning) self.assertFalse('Foo Deprecated' in output.getvalue()) class CallbackFilterTest(TestCase): def test_sense(self): Loading Loading
django/conf/__init__.py +10 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ variable, and then from django.conf.global_settings; see the global settings fil a list of all possible variables. """ import logging import os import time # Needed for Windows import warnings Loading Loading @@ -55,6 +56,15 @@ class LazySettings(LazyObject): """ Setup logging from LOGGING_CONFIG and LOGGING settings. """ try: # Route warnings through python logging logging.captureWarnings(True) # Allow DeprecationWarnings through the warnings filters warnings.simplefilter("default", DeprecationWarning) except AttributeError: # No captureWarnings on Python 2.6, DeprecationWarnings are on anyway pass if self.LOGGING_CONFIG: from django.utils.log import DEFAULT_LOGGING # First find the logging configuration function ... Loading
django/utils/log.py +3 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,9 @@ DEFAULT_LOGGING = { 'level': 'ERROR', 'propagate': False, }, 'py.warnings': { 'handlers': ['console'], }, } } Loading
docs/releases/1.5.txt +7 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,13 @@ Django 1.5 also includes several smaller improvements worth noting: :attr:`~django.db.models.Options.index_together` documentation for more information. * During Django's logging configuration verbose Deprecation warnings are enabled and warnings are captured into the logging system. Logged warnings are routed through the ``console`` logging handler, which by default requires :setting:`DEBUG` to be True for output to be generated. The result is that DeprecationWarnings should be printed to the console in development environments the way they have been in Python versions < 2.7. Backwards incompatible changes in 1.5 ===================================== Loading
tests/regressiontests/logging_tests/tests.py +29 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ from __future__ import unicode_literals import copy import logging import sys import warnings from django.conf import compat_patch_logging_config, LazySettings Loading @@ -10,9 +11,11 @@ from django.test import TestCase, RequestFactory from django.test.utils import override_settings from django.utils.log import CallbackFilter, RequireDebugFalse from django.utils.six import StringIO from django.utils.unittest import skipUnless from ..admin_scripts.tests import AdminScriptTestCase PYVERS = sys.version_info[:2] # logging config prior to using filter with mail_admins OLD_LOGGING = { Loading Loading @@ -131,6 +134,32 @@ class DefaultLoggingTest(TestCase): self.logger.error("Hey, this is an error.") self.assertEqual(output.getvalue(), 'Hey, this is an error.\n') @skipUnless(PYVERS > (2,6), "warnings captured only in Python >= 2.7") class WarningLoggerTests(TestCase): """ Tests that warnings output for DeprecationWarnings is enabled and captured to the logging system """ def setUp(self): self.logger = logging.getLogger('py.warnings') self.old_stream = self.logger.handlers[0].stream def tearDown(self): self.logger.handlers[0].stream = self.old_stream @override_settings(DEBUG=True) def test_warnings_capture(self): output = StringIO() self.logger.handlers[0].stream = output warnings.warn('Foo Deprecated', DeprecationWarning) self.assertTrue('Foo Deprecated' in output.getvalue()) def test_warnings_capture_debug_false(self): output = StringIO() self.logger.handlers[0].stream = output warnings.warn('Foo Deprecated', DeprecationWarning) self.assertFalse('Foo Deprecated' in output.getvalue()) class CallbackFilterTest(TestCase): def test_sense(self): Loading