A simple Django app to log requests/responses in various formats, such as JSON.
Project description
Django Logging
A Django library that logs request, response and exception details in a JSON document. It uses the python rotation mechanism to rotate the file logs, but the rotation files will be gziped.
Installation
pip install git+https://github.com/cipriantarta/django-logging
or
pip install django-logging-json
Quick start
Add “django_logging” to your INSTALLED_APPS settings like this:
INSTALLED_APPS = (
...
'django_logging',
)
Include the DjangoLoggingMiddleware middleware in your MIDDLEWARE_CLASSES like this:
MIDDLEWARE_CLASSES = (
'django_logging.middleware.DjangoLoggingMiddleware',
...
)
Handlers
AppFileHandler
This handle will log request/response info to LOG_PATH/app.log. It will also log request/exception, for unhandled exceptions, in the same file. Log format:
Request and Response
{
"INFO":
{
"timestamp":
{
"request": {
... request info ...
},
"response": {
... response info ...
}
}
}
}
Request and Exception
{
"ERROR":
{
"timestamp":
{
"request": {
... request info ...
},
"exception": {
"message": "Exception message",
"traceback": [
...
]
}
}
}
}
SQLFileHandler
This handler will log all queries to LOG_PATH/sql.log. In a production environment you should set LOG_LEVEL = Error or SQL_LOG = False to avoid performance issues. The queries will also be logged to the console if CONSOLE_LOG is set to True
DebugFileHandler
This handler will log debug messages to LOG_PATH/debug.log. This handler is only used when settings.DEBUG is set to True.
Log format:
[%(levelname)s - %(created)s], file:%(module)s.py, func:%(funcName)s, ln:%(lineno)s: %(message)s
Custom Use
To log debug messages:
from django_logging import log
log.debug('debug message')
To log handled exceptions:
from django_logging import log, ErrorLogObject
log.error(ErrorLogObject(request, exception))
Settings
Inspired by Django Rest Framework, Django Logging settings are grouped in a single dictionary.
To override Django Logging settings, add a dictionary in your project’s settings file
DJANGO_LOGGING = {
"CONSOLE_LOG": False
}
Default Settings
CONSOLE_LOG = True
Log to console.
SQL_LOG = True
Log SQL queries.
LOG_LEVEL = 'debug'
If settings.DEBUG is set to True, otherwise LOG_LEVEL is set to ‘info’
DISABLE_EXISTING_LOGGERS = True
Set this to False if you want to combine with multiple loggers.
LOG_PATH = '{}/logs'.format(settings.BASE_DIR)
If the logs folder does not exist, it will be created.
IGNORED_PATHS = ['/admin', '/static', '/favicon.ico']
List of URL endpoints to ignore.
RESPONSE_FIELDS = ('status', 'reason', 'charset', 'headers', 'content')
List of response fields to log.
CONTENT_JSON_ONLY = True
Log response content only if its a JSON document.
ROTATE_MB = 100
Maximum size in MB that the log file can have before it gets rotated.
ROTATE_COUNT = 10
Maximum number of rotated log files.
Change Log
1.4 [2016-02-19]
bug fixing
added support for query logging when using multiple database
added database alias for sql logs if multiple databases are used
added plain dict logging support
1.3 [2015-12-13]
added support for Python 2.7
added support for Django >= 1.4
1.2 [2015-11-22]
added sql logging support
log entries are now sorted by keys
console handler now indents the log entries by 4 spaces
log response content if it’s JSON (bug)
1.1 [2015-11-17]
added exception “type” for exception log entries
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.