diff options
-rw-r--r-- | pydis_site/apps/api/dblogger.py | 22 | ||||
-rw-r--r-- | pydis_site/settings.py | 5 |
2 files changed, 26 insertions, 1 deletions
diff --git a/pydis_site/apps/api/dblogger.py b/pydis_site/apps/api/dblogger.py new file mode 100644 index 00000000..f133832a --- /dev/null +++ b/pydis_site/apps/api/dblogger.py @@ -0,0 +1,22 @@ +from logging import LogRecord, StreamHandler + + +class DatabaseLogHandler(StreamHandler): + """Logs entries into the database.""" + + def emit(self, record: LogRecord): + """Write the given `record` into the database.""" + # This import needs to be deferred due to Django's application + # registry instantiation logic loading this handler before the + # application is ready. + from pydis_site.apps.api.models.log_entry import LogEntry + + entry = LogEntry( + application='site', + logger_name=record.name, + level=record.levelname.lower(), + module=record.module, + line=record.lineno, + message=self.format(record) + ) + entry.save() diff --git a/pydis_site/settings.py b/pydis_site/settings.py index 2050c6ab..4a4eb94b 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -227,11 +227,14 @@ LOGGING = { 'handlers': { 'console': { 'class': 'logging.StreamHandler' + }, + 'database': { + 'class': 'pydis_site.apps.api.dblogger.DatabaseLogHandler' } }, 'loggers': { 'django': { - 'handlers': ['console'], + 'handlers': ['console', 'database'], 'propagate': True, 'level': env( 'LOG_LEVEL', |