• Stars
    star
    122
  • Rank 292,031 (Top 6 %)
  • Language
    Python
  • License
    BSD 3-Clause "New...
  • Created about 15 years ago
  • Updated about 12 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

This project is no longer updated. Please see https://sentry.io/ for its successor

django-db-log

Logs Django exceptions to your database handler.

This project has been replaced by Sentry (https://getsentry.com)

Upgrading

If you use South migrations, simply run:

python manage.py migrate djangodblog

If you don't use South, then start.

Notable Changes

  • 2.1.0 There is no longer a middleware. Instead, we use a fallback exception handler which catches all.
  • 2.0.0 Added checksum column to Error. Several indexes were created. Checksum calculation slightly changed.
  • 1.4.0 Added logger column to both Error and ErrorBatch. traceback and class_name are now nullable.
  • 1.3.0 Added level column to both Error and ErrorBatch.

Install

The easiest way to install the package is via pip:

pip install django-db-log --upgrade

OR, if you're not quite on the same page (work on that), with setuptools:

easy_install django-db-log

Once installed, update your settings.py and add dblog to INSTALLED_APPS:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'djangodblog',
    ...
)

Finally, run python manage.py syncdb to create the database tables.

Configuration

Several options exist to configure django-db-log via your settings.py:

DBLOG_CATCH_404_ERRORS

Enable catching of 404 errors in the logs. Default value is False:

DBLOG_CATCH_404_ERRORS = True

You can skip other custom exception types by adding a skip_dblog = True attribute to them.

DBLOG_DATABASE_USING

Use a secondary database to store error logs. This is useful if you have several websites and want to aggregate error logs onto one database server:

# This should correspond to a key in your DATABASES setting
DBLOG_DATABASE_USING = 'default'

You should also enable the DBLogRouter to avoid things like extraneous table creation:

DATABASE_ROUTERS = [
        'djangodblog.routers.DBLogRouter',
        ...
]

Some things to note:

  • This functionality REQUIRES Django 1.2.

DBLOG_ENHANCED_TRACEBACKS

Enables showing full embedded (enhanced) tracebacks within the administration for "Messages". These work almost identically to the default exception pages within Django's DEBUG environment:

# Disable embedded interactive tracebacks in the admin
DBLOG_ENHANCED_TRACEBACKS = False
  • Note: Even if you disable displaying of enhanced tracebacks, dblog will still store the entire exception stacktrace.

DBLOG_LOGGING

Enabling this setting will turn off automatic database logging within the exception handler, and instead send all exceptions to the named logger dblog. Use this in conjuction with djangodblog.handlers.DBLogHandler or your own handler to tweak how logging is dealt with.

A good example use case for this, is if you want to write to something like a syslog ahead of time, and later process that into the database with another tool.

Integration with logging

django-db-log supports the ability to directly tie into the logging module. To use it simply add DBLogHandler to your logger:

import logging
from djangodblog.handlers import DBLogHandler

logging.getLogger().addHandler(DBLogHandler())

# Add StreamHandler to dblog's default so you can catch missed exceptions
logging.getLogger('dblog').addHandler(logging.StreamHandler())

You can also use the exc_info and extra=dict(url=foo) arguments on your log methods. This will store the appropriate information and allow django-db-log to render it based on that information:

logging.error('There was some crazy error', exc_info=sys.exc_info(), extra={'url': request.build_absolute_uri()})

Usage

You will find two new admin panels in the automatically built Django administration:

  • Messages (Error)
  • Message summaries (ErrorBatch)

It will store every single error inside of the Errors model, and it will store a collective, or summary, of errors inside of Error batches (this is more useful for most cases). If you are using this on multiple sites with the same database, the Errors table also contains the SITE_ID for which it the error appeared on.

If you wish to access these within your own views and models, you may do so via the standard model API:

from djangodblog.models import Error, ErrorBatch

# Pull the last 10 unresolved errors.
ErrorBatch.objects.filter(status=0).order_by('-last_seen')[0:10]

You can also record errors outside of handler if you want:

from djangodblog.models import Error

try:
        ...
except Exception, exc:
        Error.objects.create_from_exception(exc, [url=None])

If you wish to log normal messages (useful for non-logging integration):

from djangodblog.models import Error
import logging

Error.objects.create_from_text('Error Message'[, level=logging.WARNING, url=None])

Both the url and level parameters are optional. level should be one of the following:

  • logging.DEBUG
  • logging.INFO
  • logging.WARNING
  • logging.ERROR
  • logging.FATAL

If you have a custom exception class, similar to Http404, or something else you don't want to log, you can also add skip_dblog = True to your exception class or instance, and dblog will simply ignore the error.

Notes

  • django-db-log will automatically integrate with django-idmapper.
  • django-db-log supports South migrations.
  • The fact that the admin shows large quantities of results, even if there aren't, is not a bug. This is an efficiency hack on top of Django.

More Repositories

1

django-devserver

A drop-in replacement for Django's runserver.
Python
1,269
star
2

mangodb

A database that operates at CLOUD SCALE
Python
883
star
3

taskmaster

A simple distributed queue designed for handling one-off tasks with large sets of tasks
Python
443
star
4

django-ratings

Pluggable rating fields in Django.
Python
409
star
5

django-sphinx

A transparent layer for full-text search using Sphinx and Django
Python
357
star
6

django-uuidfield

A UUIDField for Django
Python
264
star
7

mock-django

Python
224
star
8

logan

Logan is a toolkit for building standalone Django applications
Python
206
star
9

wp-lifestream

Lifestreaming plugin for Wordpress
PHP
121
star
10

django-paging

Sexy pagination in Django
Python
108
star
11

django-orm-cache

A caching layer for Django
87
star
12

decruft

python-readability, but faster (mirror-ish)
Python
83
star
13

django-view-as

A Django middleware which allows you to view the site on behalf of a user.
Python
81
star
14

django-idmapper

An identify mapper for the Django ORM
Python
72
star
15

piplint

Piplint validates your current environment against requirements files
Python
62
star
16

python-tools-tmbundle

Adds support for automated PyFlakes linting in TextMate
Python
61
star
17

peated

HTML
61
star
18

django-static-compiler

Python
56
star
19

pdbinject

A Python utility which uses GDB to inject a telnet-able PDB session into an existing process
Python
55
star
20

py-wikimarkup

A MediaWiki-to-HTML parser for Python.
Python
53
star
21

feedreader

An RSS/Atom feed parsing layer for lxml.objectify in Python
Python
52
star
22

django-sentry

This repo has been moved!
49
star
23

django-indexer

A simple key/value store for indexing meta data on JSON-type fields
Python
46
star
24

chardet

Forked version of chardet
Python
41
star
25

sentry-old

(In Development) Sentry 2.x is a realtime event logging and aggregation platform
Python
40
star
26

django-data-tools

Python
38
star
27

django-compositepks

Composite Primary Keys fork
Python
38
star
28

django-oursql

Django database backend for MySQL via oursql.
Python
37
star
29

dotfiles

My personal dotfiles
Shell
36
star
30

quickunit

A Nose plugin which enables determining which tests to run based on the current git diff
Python
34
star
31

hive

My home infrastructure
Jinja
33
star
32

nibbits-shared

Some shared libraries which we have created at Nibbits
Python
28
star
33

numbers

Python Numbers for Humans
Python
26
star
34

sexytime

Python
26
star
35

nexus-memcache

Memcache statistics plugin for Nexus
Python
23
star
36

sentry

THIS REPOSITORY HAS BEEN MOVED
22
star
37

django-notices

A message notification system for Django
Python
22
star
38

django-db-routes

work in progress
Python
20
star
39

peek

Take a peek at whats slowing down your Python application
Python
20
star
40

ghostplusplus

Git Mirror of GHost++
C
20
star
41

kleenex

A Nose plugin designed to detect coverage and only run the tests that matter.
Python
18
star
42

git-owners

Python
16
star
43

nexus-redis

Redis stats in Nexus
Python
16
star
44

pastethat

A Django Pastebin (Pastethat.com)
Python
15
star
45

dateminer

Extract dates from webpages
Python
13
star
46

selenium-saucelabs-python

Selenium driver for Sauce OnDemand
Python
11
star
47

pmp

Python
11
star
48

anti-spam

11
star
49

pytest-django-lite

The bare minimum to integrate py.test with Django.
Python
11
star
50

SublimeFlakes

Inline PyFlakes in Sublime Text 2
Python
11
star
51

objtrack

Generic object 'viewed' status tracking in Django
Python
11
star
52

php-httplib

A port of Python's httplib in PHP
PHP
10
star
53

gitstats

Unofficial fork of GitStats with some bugfixes
Python
10
star
54

panelkit

WIP: A kit for building a tablet-focused Home Assistant UI.
TypeScript
9
star
55

europython-2011

9
star
56

django-bbcode

I'm tired of bitbucket
Python
9
star
57

gitboard

Python
8
star
58

wiki-to-overview

Redmine Plugin: Forward overview to Wiki
Ruby
8
star
59

nose-json

Python
8
star
60

lovelace-nextbus-card

A card giving richer public transit display using NextBus sensors.
TypeScript
7
star
61

pyconsg-tutorial-bootstrap

Python
7
star
62

hass-luxor

FXLuminaire Luxor integration for Home Assistant
Python
6
star
63

tabletop-server

Python
6
star
64

muskrats

TypeScript
6
star
65

nexus-celery

6
star
66

php-database

A simple database library for MySQL and PGSQL.
PHP
6
star
67

djangospot

DjangoSpot.com Source
JavaScript
6
star
68

nose-bisect

Flush out bad tests with easy bisection in Python/Nose
Python
6
star
69

redmine-improved-revisions

Redmine Plugin: Improved revisions in Redmine
Ruby
5
star
70

nibbits-maploader

Nibbits automated map and replay installer
C#
5
star
71

unifi-mqtt

Python
5
star
72

redmine_hudson

Ruby
5
star
73

forward-to-diffs

Redmine plugin: Forward revisions to diffs
Ruby
5
star
74

soundbot

Audio player extension for Phenny
Python
4
star
75

minecraft-tools

Python
4
star
76

site

JavaScript
4
star
77

rss-to-tumblr

Allows importing an rss under a specific set of tags
Python
4
star
78

nexus-postgresql

4
star
79

jinja1-djangosupport

Jinja 1 with updated Django Support
Python
4
star
80

reraise

Python
4
star
81

notsetuptools

Python
4
star
82

protobufs

Google Protocal Buffers
C++
4
star
83

redmine-home-to-projects

Forward a Redmine user to a the project listing when visiting the Home page.
Ruby
4
star
84

djangospot2

DjangoSpot using Pylons and Redis
Python
3
star
85

flask-redis

Redis support for Flask
Python
3
star
86

tabletop-mobile

JavaScript
3
star
87

pyconsg-tutorial-example

Python
3
star
88

raven

THIS PROJECT HAS BEEN MOVED
3
star
89

scmap

Python
3
star
90

gochatter

2
star
91

homeline

very wip
TypeScript
2
star
92

galaxyvalidator

galaxyvalidator.com source
Python
2
star
93

ghostplusplus-nibbits

Nibbit's version of GHost++
C
2
star
94

cask-server

Python
2
star
95

davidcramer-redirect

Redirects links on davidcramer.net to JustCramer.com
Python
2
star
96

redmine_disqus_ci

Disqus CI for Redmine
Ruby
2
star
97

stonescript

1
star
98

ad-alarm-manager

Python
1
star
99

cask-web

TypeScript
1
star
100

gobot

Go
1
star