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 and it has support for sending the log messages to Elasticsearch.
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.
INDENT_CONSOLE_LOG = 2 - Indent console log by “n” spaces.
ELASTICSEARCH_ENABLED = False - Set to yes to enable elasticsearch support.
ELASTICSEARCH_HOSTS = ["localhost"] - Elasticsearch hosts
ELASTICSEARCH_INDEX = "django-logging-json" - Elasticsearch index name
ELASTICSEARCH_SSL = False - Elasticsearch connection via SSL (:443)
ELASTICSEARCH_AUTH = None - Elasticsearch authorization credentials (user, password)
Change Log
1.5.8 [2017-10-03]
allow “raw” messages to be logged.
1.5.6 [2017-10-02]
adds support for Elasticsearch SSL connection and authorization
1.5.5 [2017-06-21]
fixes compatibility for django MIDDLEWARE django >= 1.10
1.5.4 [2017-02-08]
fixes compatibility with python < 3.5 when logging exceptions
1.5.3 [2016-06-26]
bug fixing
1.5 [2016-06-04]
do not return a response in process_exception. Give other middlewares a chance to process the exception.
console log indentation
elastic search support. below a sample chart using kibana with elasticsearch and django-logging
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
Metadata
Release files for django-logging-json 1.5.88888888
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django-logging-json-1.5.88888888.tar.gz | 8.9 kB | Without provenance | Details for django-logging-json-1.5.88888888.tar.gz |
Release files / django-logging-json-1.5.88888888.tar.gz
| Download URL | django-logging-json-1.5.88888888.tar.gz |
|---|---|
| Size | 8.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3cd9e17bdb55b62f599932321db87833d2d28d28dcd73dc9ce79e968481c18c2
|
|
BLAKE2b-256 checksum How to use checksums |
3a5288ad5f4f7b6c49cb0039828b4ae84224310f2d3e5f1e53eb1bc078de2124
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for django-logging-json 1.5.88888888
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.