Django logging in database. For large projects please use Sentry
- Django>=3.2
- Python 3.8+
WTFPL
- Install
pip install django-db-logger
- Add "django_db_logger" to your
INSTALLED_APPS
setting like this
INSTALLED_APPS = (
...
'django_db_logger',
)
- Add handler and logger to
LOGGING
setting like this
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(asctime)s %(message)s'
},
},
'handlers': {
'db_log': {
'level': 'DEBUG',
'class': 'django_db_logger.db_log_handler.DatabaseLogHandler'
},
},
'loggers': {
'db': {
'handlers': ['db_log'],
'level': 'DEBUG'
},
'django.request': { # logging 500 errors to database
'handlers': ['db_log'],
'level': 'ERROR',
'propagate': False,
}
}
}
- Run
python manage.py migrate
to create django-db-logger models. - Use
django-db-logger
like this
import logging
db_logger = logging.getLogger('db')
db_logger.info('info message')
db_logger.warning('warning message')
try:
1/0
except Exception as e:
db_logger.exception(e)
- DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE: integer. list per page in admin view. default
10
- DJANGO_DB_LOGGER_ENABLE_FORMATTER: boolean. Using
formatter
options to format message.True
orFalse
, defaultFalse
Extend the DatabaseLogHandler
to add your own configurations and functionality to the add_details
method:
# my_log_handlers.py
from django_db_logger.db_log_handler import DatabaseLogHandler
class MyDatabaseLogHandler(DatabaseLogHandler):
def add_details(self, record, log_fields):
"""
Extract relevant details from the record's request:
* request path
* used HTTP method
* used GET params (within URL)
"""
request = getattr(record, 'request', None)
if request:
log_fields['details'] = {
'path': getattr(request, 'path', None),
'method': getattr(request, 'method', None),
'params': getattr(request, 'GET', None),
}
And make sure to use your own class in the logging configuration: .. code-block:: python
# settings.py LOGGING["handlers"]["db_log"] = {
"class": "my_project.my_log_handlers.MyDatabaseLogHandler", "level": "DEBUG",}
- Create a new app and add it to
INSTALLED_APPS
- Copy files
django-db-logger/models.py
,django-db-logger/admin.py
,django-db-logger/db_log_handler.py
to the app folder - Replace
DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE
inadmin.py
with an integer - Replace
DJANGO_DB_LOGGER_ENABLE_FORMATTER
in db_log_handler.py withTrue
orFalse
. RemoveMSG_STYLE_SIMPLE
, it was not used. - Replace logger class
django_db_logger.db_log_handler.DatabaseLogHandler
in your Settings with the new logger class - Customize the logger to meet your needs. 🍺