- Author:
- mpasternacki
- Posted:
- December 4, 2009
- Language:
- Python
- Version:
- 1.1
- Score:
- 1 (after 1 ratings)
Middleware class logging request time to stderr.
This class can be used to measure time of request processing within Django. It can be also used to log time spent in middleware and in view itself, by putting middleware multiple times in INSTALLED_MIDDLEWARE.
Static method `log_message' may be used independently of the middleware itself, outside of it, and even when middleware is not listed in INSTALLED_MIDDLEWARE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import logging
import sys
import datetime
import uuid
class RequestTimeLoggingMiddleware(object):
"""Middleware class logging request time to stderr.
This class can be used to measure time of request processing
within Django. It can be also used to log time spent in
middleware and in view itself, by putting middleware multiple
times in INSTALLED_MIDDLEWARE.
Static method `log_message' may be used independently of the
middleware itself, outside of it, and even when middleware is not
listed in INSTALLED_MIDDLEWARE.
"""
@staticmethod
def log_message(request, tag, message=''):
"""Log timing message to stderr.
Logs message about `request' with a `tag' (a string, 10
characters or less if possible), timing info and optional
`message'.
Log format is "timestamp tag uuid count path +delta message"
- timestamp is microsecond timestamp of message
- tag is the `tag' parameter
- uuid is the UUID identifying request
- count is number of logged message for this request
- path is request.path
- delta is timedelta between first logged message
for this request and current message
- message is the `message' parameter.
"""
dt = datetime.datetime.utcnow()
if not hasattr(request, '_logging_uuid'):
request._logging_uuid = uuid.uuid1()
request._logging_start_dt = dt
request._logging_pass = 0
request._logging_pass += 1
print >> sys.stderr, (
u'%s %-10s %s %2d %s +%s %s' % (
dt.isoformat(),
tag,
request._logging_uuid,
request._logging_pass,
request.path,
dt - request._logging_start_dt,
message,
)
).encode('utf-8')
def process_request(self, request):
self.log_message(request, 'request ')
def process_response(self, request, response):
s = getattr(response, 'status_code', 0)
r = str(s)
if s in (300, 301, 302, 307):
r += ' => %s' % response.get('Location', '?')
elif response.content:
r += ' (%db)' % len(response.content)
self.log_message(request, 'response', r)
return response
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 8 months ago
Comments
Please login first before commenting.