diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2010-10-06 15:02:26 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2010-10-06 15:02:26 +0000 |
| commit | fea159282b75130b5f6cf52ec92ddfa09467f3c9 (patch) | |
| tree | 4ae1ede0ad6b7deeb8424eedc26a6919c5b9d6f7 /django/utils | |
| parent | 57aeb542792317df13c54eab7ceac73ceeb2847d (diff) | |
Fixed #14406 -- Added a Python 2.4 compatibility to the logging interface. Thanks to Łukasz Rekucki for the report, and to Luke Plant for original patch this was based on.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13989 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/utils')
| -rw-r--r-- | django/utils/log.py | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/django/utils/log.py b/django/utils/log.py index aece33bfac..b9d32e339b 100644 --- a/django/utils/log.py +++ b/django/utils/log.py @@ -1,4 +1,5 @@ import logging +import sys from django.core import mail # Make sure a NullHandler is available @@ -17,10 +18,32 @@ try: except ImportError: from django.utils.dictconfig import dictConfig +if sys.version_info < (2, 5): + class LoggerCompat(object): + def __init__(self, logger): + self._logger = logger + + def __getattr__(self, name): + val = getattr(self._logger, name) + if callable(val): + def _wrapper(*args, **kwargs): + # Python 2.4 logging module doesn't support 'extra' parameter to + # methods of Logger + kwargs.pop('extra', None) + return val(*args, **kwargs) + return _wrapper + else: + return val + + def getLogger(name=None): + return LoggerCompat(logging.getLogger(name=name)) +else: + getLogger = logging.getLogger + # Ensure the creation of the Django logger # with a null handler. This ensures we don't get any # 'No handlers could be found for logger "django"' messages -logger = logging.getLogger('django') +logger = getLogger('django') if not logger.handlers: logger.addHandler(NullHandler()) @@ -35,7 +58,14 @@ class AdminEmailHandler(logging.Handler): from django.conf import settings try: - request = record.request + if sys.version_info < (2,5): + # A nasty workaround required because Python 2.4's logging + # module doesn't support passing in extra context. + # For this handler, the only extra data we need is the + # request, and that's in the top stack frame. + request = record.exc_info[2].tb_frame.f_locals['request'] + else: + request = record.request subject = '%s (%s IP): %s' % ( record.levelname, |
