summaryrefslogtreecommitdiff
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
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
-rw-r--r--django/core/handlers/base.py4
-rw-r--r--django/core/handlers/modpython.py4
-rw-r--r--django/core/handlers/wsgi.py4
-rw-r--r--django/db/backends/util.py4
-rw-r--r--django/middleware/common.py4
-rw-r--r--django/middleware/csrf.py4
-rw-r--r--django/utils/log.py34
-rw-r--r--django/views/decorators/http.py4
-rw-r--r--django/views/generic/simple.py5
-rw-r--r--docs/topics/logging.txt8
10 files changed, 56 insertions, 19 deletions
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index a0aecbfdd3..26a8146161 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -1,12 +1,12 @@
-import logging
import sys
from django import http
from django.core import signals
from django.utils.encoding import force_unicode
from django.utils.importlib import import_module
+from django.utils.log import getLogger
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
class BaseHandler(object):
diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py
index 395ec65314..5afc61296f 100644
--- a/django/core/handlers/modpython.py
+++ b/django/core/handlers/modpython.py
@@ -1,4 +1,3 @@
-import logging
import os
from pprint import pformat
import sys
@@ -10,8 +9,9 @@ from django.core.handlers.base import BaseHandler
from django.core.urlresolvers import set_script_prefix
from django.utils import datastructures
from django.utils.encoding import force_unicode, smart_str, iri_to_uri
+from django.utils.log import getLogger
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
# NOTE: do *not* import settings (or any module which eventually imports
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 0978be0d6d..dead1e1adf 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -1,4 +1,3 @@
-import logging
from pprint import pformat
import sys
from threading import Lock
@@ -13,8 +12,9 @@ from django.core.handlers import base
from django.core.urlresolvers import set_script_prefix
from django.utils import datastructures
from django.utils.encoding import force_unicode, iri_to_uri
+from django.utils.log import getLogger
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
diff --git a/django/db/backends/util.py b/django/db/backends/util.py
index fb5162dda1..865508a057 100644
--- a/django/db/backends/util.py
+++ b/django/db/backends/util.py
@@ -1,11 +1,11 @@
import datetime
import decimal
-import logging
from time import time
from django.utils.hashcompat import md5_constructor
+from django.utils.log import getLogger
-logger = logging.getLogger('django.db.backends')
+logger = getLogger('django.db.backends')
class CursorDebugWrapper(object):
def __init__(self, cursor, db):
diff --git a/django/middleware/common.py b/django/middleware/common.py
index 60af804925..2a45acfff8 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -1,4 +1,3 @@
-import logging
import re
from django.conf import settings
@@ -7,8 +6,9 @@ from django.core.mail import mail_managers
from django.utils.http import urlquote
from django.core import urlresolvers
from django.utils.hashcompat import md5_constructor
+from django.utils.log import getLogger
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
class CommonMiddleware(object):
diff --git a/django/middleware/csrf.py b/django/middleware/csrf.py
index ed2a4f0e98..b88dd55a3d 100644
--- a/django/middleware/csrf.py
+++ b/django/middleware/csrf.py
@@ -6,7 +6,6 @@ against request forgeries from other sites.
"""
import itertools
-import logging
import re
import random
@@ -14,6 +13,7 @@ from django.conf import settings
from django.core.urlresolvers import get_callable
from django.utils.cache import patch_vary_headers
from django.utils.hashcompat import md5_constructor
+from django.utils.log import getLogger
from django.utils.safestring import mark_safe
_POST_FORM_RE = \
@@ -21,7 +21,7 @@ _POST_FORM_RE = \
_HTML_TYPES = ('text/html', 'application/xhtml+xml')
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
# Use the system (hardware-based) random number generator if it exists.
if hasattr(random, 'SystemRandom'):
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,
diff --git a/django/views/decorators/http.py b/django/views/decorators/http.py
index cb4c1aff21..b763d6ee92 100644
--- a/django/views/decorators/http.py
+++ b/django/views/decorators/http.py
@@ -10,16 +10,16 @@ except ImportError:
from calendar import timegm
from datetime import timedelta
from email.Utils import formatdate
-import logging
from django.utils.decorators import decorator_from_middleware, available_attrs
from django.utils.http import parse_etags, quote_etag
+from django.utils.log import getLogger
from django.middleware.http import ConditionalGetMiddleware
from django.http import HttpResponseNotAllowed, HttpResponseNotModified, HttpResponse
conditional_page = decorator_from_middleware(ConditionalGetMiddleware)
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
def require_http_methods(request_method_list):
diff --git a/django/views/generic/simple.py b/django/views/generic/simple.py
index abadef3629..7c38f07688 100644
--- a/django/views/generic/simple.py
+++ b/django/views/generic/simple.py
@@ -1,9 +1,8 @@
-import logging
-
from django.template import loader, RequestContext
from django.http import HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect, HttpResponseGone
+from django.utils.log import getLogger
-logger = logging.getLogger('django.request')
+logger = getLogger('django.request')
def direct_to_template(request, template, extra_context=None, mimetype=None, **kwargs):
diff --git a/docs/topics/logging.txt b/docs/topics/logging.txt
index 3d4dffe3e0..149bd0ae7a 100644
--- a/docs/topics/logging.txt
+++ b/docs/topics/logging.txt
@@ -411,6 +411,10 @@ Messages to this logger have the following extra context:
* ``request``: The request object that generated the logging
message.
+.. note::
+ Due to a limitation in the logging library, this extra
+ context is not available if you are using Python 2.4.
+
``django.db.backends``
~~~~~~~~~~~~~~~~~~~~~~
@@ -424,6 +428,10 @@ Messages to this logger have the following extra context:
* ``sql``: The SQL statement that was executed.
* ``params``: The parameters that were used in the SQL call.
+.. note::
+ Due to a limitation in the logging library, this extra
+ context is not available if you are using Python 2.4.
+
Handlers
--------