Skip to content

Instantly share code, notes, and snippets.

@ericflo
Created October 25, 2010 07:49
Show Gist options
  • Save ericflo/644566 to your computer and use it in GitHub Desktop.
Save ericflo/644566 to your computer and use it in GitHub Desktop.
Log structured data about events that happen in your system (in JSON format for maximum flexibility).
# 00 prepended to filename so this shows up first in the list of gists.
import socket
import time
import simplejson
from django.conf import settings
def log_event(logger, event, request=None, data=None,
# Hostname and flavor like this for performance hack
_hostname=socket.gethostname(), _flavor=settings.FLAVOR):
if not data:
data = {}
data.update({
'event': event,
'ts': time.time(),
'hostname': _hostname,
'flavor': _flavor,
})
has_session = getattr(request, 'session', None)
if request and has_session and request.user.is_authenticated():
data.update({
'user_id': request.user.id,
'username': request.user.username,
})
logger.info(simplejson.dumps(data))
import logging
import time
from django_ext.logging import log_event
logger = logging.getLogger(__name__)
class LoggingMiddleware(object):
def process_request(self, request):
request._start_time = time.time()
def process_response(self, request, response):
elapsed = time.time() - request._start_time
log_event(logger, 'webrequest', request, {
'method': request.method,
'url': request.build_absolute_uri(),
'elapsed': elapsed,
'user_agent': request.META.get('HTTP_USER_AGENT'),
'client_ip': request.META.get('REMOTE_ADDR'),
'response_size': len(response.content),
'response_status': response.status_code,
})
return response
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment