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', | 
