Store Django Log messages in a database?

2020-06-01 05:06发布

问题:

Django (the python web framework) uses python's logging system to store logs.

Is there an easy way to store log messages in a database, and then allow admin users to look over them via the web? It's the sort of thing I could write myself, but no point re-inventing the wheel. I don't want to log exceptions, but info/debug/notice type messages that I have added to the code.

Ideally I'd like to be able to store metadata about the log message as it's done (like the remote IP address, user agent, wsgi process id, etc.), and then filter / browse based on that (i.e. show me all log messages from this IP address in the last 24 hours). Has anyone done this?

回答1:

Just use Sentry. Raven, the Django piece of the functionality hooks into the logging framework, so in addition to collecting errors from your app, any custom log messages should show up as well.



回答2:

Apart from the obvious choice of Sentry, for the sake of exercise, there is a nice blog article titled "Creating custom log handler that logs to database models in django" in the "James Lin Blog", which briefly explains how to do this using a second database, with code samples.

The code is adapted from the standard Python RotatingFileHandler:

...The RotatingFileHandler allows you to specify which file to write to and rotate files, therefore my DBHandler should also allow you to specify which model to insert to and specify expiry in settings, and best of all, on a standalone app.

This could also be easily adapted for using a single db.



回答3:

check django-db-logger

it takes less than a minute to integrate

https://github.com/CiCiUi/django-db-logger



回答4:

try django-requests. I've tried it and it basically just puts the request logs in a table called requests.