summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-10-06 15:02:26 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-10-06 15:02:26 +0000
commitfea159282b75130b5f6cf52ec92ddfa09467f3c9 (patch)
tree4ae1ede0ad6b7deeb8424eedc26a6919c5b9d6f7 /django/utils
parent57aeb542792317df13c54eab7ceac73ceeb2847d (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.py34
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,