diff --git a/config/settings/base.py b/config/settings/base.py index 8bc59d1755..2941b22a3d 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -338,15 +338,30 @@ "datefmt": "%Y-%m-%d %H:%M:%S", }, }, + "filters": { + "below_error": { + "()": "django.utils.log.CallbackFilter", + "callback": lambda record: record.levelno < logging.ERROR, + }, + }, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", + "stream": "ext://sys.stdout", + "formatter": "verbose", + "filters": ["below_error"], + }, + "console_error": { + "level": "ERROR", + "class": "logging.StreamHandler", + "stream": "ext://sys.stderr", "formatter": "verbose", }, "time_logging": { "level": "INFO", "class": "logging.StreamHandler", + "stream": "ext://sys.stdout", "formatter": "request_time", }, }, @@ -357,7 +372,7 @@ "propagate": False, }, }, - "root": {"level": "INFO", "handlers": ["console"]}, + "root": {"level": "INFO", "handlers": ["console", "console_error"]}, } # Django Rest Framework diff --git a/config/settings/deployment.py b/config/settings/deployment.py index 855adc8801..b8ead53575 100644 --- a/config/settings/deployment.py +++ b/config/settings/deployment.py @@ -79,22 +79,40 @@ "%(process)d %(thread)d %(message)s" } }, + "filters": { + "below_error": { + "()": "django.utils.log.CallbackFilter", + "callback": lambda record: record.levelno < logging.ERROR, + }, + }, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", + "stream": "ext://sys.stdout", "formatter": "verbose", - } + "filters": ["below_error"], + }, + "console_error": { + "level": "ERROR", + "class": "logging.StreamHandler", + "stream": "ext://sys.stderr", + "formatter": "verbose", + }, }, - "root": {"level": "INFO", "handlers": ["console"]}, + "root": {"level": "INFO", "handlers": ["console", "console_error"]}, "loggers": { "django.db.backends": { "level": "ERROR", - "handlers": ["console"], + "handlers": ["console_error"], "propagate": False, }, # Errors logged by the SDK itself - "sentry_sdk": {"level": "ERROR", "handlers": ["console"], "propagate": False}, + "sentry_sdk": { + "level": "ERROR", + "handlers": ["console_error"], + "propagate": False, + }, }, } diff --git a/config/settings/test.py b/config/settings/test.py index 8ea11faebe..90d4f24f64 100644 --- a/config/settings/test.py +++ b/config/settings/test.py @@ -1,5 +1,6 @@ import base64 import json +import logging from authlib.jose import JsonWebKey @@ -66,28 +67,42 @@ "formatters": { "verbose": {"format": "%(levelname)s %(asctime)s %(module)s %(message)s"} }, + "filters": { + "below_error": { + "()": "django.utils.log.CallbackFilter", + "callback": lambda record: record.levelno < logging.ERROR, + }, + }, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", + "stream": "ext://sys.stdout", "formatter": "verbose", - } + "filters": ["below_error"], + }, + "console_error": { + "level": "ERROR", + "class": "logging.StreamHandler", + "stream": "ext://sys.stderr", + "formatter": "verbose", + }, }, "loggers": { "django.request": { - "handlers": ["console"], + "handlers": ["console_error"], "level": "ERROR", }, "audit_log": { - "handlers": ["console"], + "handlers": ["console_error"], "level": "ERROR", }, "celery": { - "handlers": ["console"], + "handlers": ["console_error"], "level": "ERROR", }, }, - "root": {"level": "INFO", "handlers": ["console"]}, + "root": {"level": "INFO", "handlers": ["console", "console_error"]}, } CELERY_TASK_ALWAYS_EAGER = True