Skip to content

Commit

Permalink
configure logging
Browse files Browse the repository at this point in the history
  • Loading branch information
adaurat committed Oct 11, 2024
1 parent 2f3d3d3 commit a6f1d86
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 14 deletions.
60 changes: 60 additions & 0 deletions qmra/logs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import logging
import sys
from django.utils import log
import structlog


class ExcludeEventsFilter(logging.Filter):
def __init__(self, excluded_event_type=None):
super().__init__()
self.excluded_event_type = excluded_event_type

def filter(self, record):
if not isinstance(record.msg, dict) or self.excluded_event_type is None:
return True # Include the log message if msg is not a dictionary or excluded_event_type is not provided

if record.msg.get('event') in self.excluded_event_type:
return False # Exclude the log message
return True # Include the log message


no_error_filter = log.CallbackFilter(
lambda r: not r.levelname == "ERROR"
)


def no_health(record):
rqs = record.msg["request"]
return not ("/health" in rqs or "/ready" in rqs or "/metrics" in rqs)


no_health_filter = log.CallbackFilter(no_health)


console_stdout_handler = {
"class": "logging.StreamHandler",
"formatter": "key_value",
"level": "INFO",
"filters": [no_error_filter, no_health_filter],
"stream": "ext://sys.stdout"
}

console_stderr_handler = {
"class": "logging.StreamHandler",
"formatter": "key_value",
"level": "ERROR",
"stream": "ext://sys.stderr"
}

json_stdout_handler = {
"class": "logging.StreamHandler",
"formatter": "json_formatter",
"filters": [no_error_filter, no_health_filter],
"stream": "ext://sys.stdout"
}

json_stderr_handler = {
"class": "logging.StreamHandler",
"formatter": "json_formatter",
"stream": "ext://sys.stderr"
}
26 changes: 12 additions & 14 deletions qmra/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import os
import structlog

from qmra.logs import json_stdout_handler, json_stderr_handler, console_stdout_handler, console_stderr_handler

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Expand Down Expand Up @@ -138,7 +139,6 @@
BASE_DIR / "qmra/static"
]


LOGGING = {
"version": 1,
"disable_existing_loggers": True,
Expand All @@ -153,7 +153,8 @@
},
"key_value": {
"()": structlog.stdlib.ProcessorFormatter,
"processor": structlog.processors.KeyValueRenderer(key_order=['timestamp', 'request', 'code', 'level', 'event']),
"processor": structlog.processors.KeyValueRenderer(
key_order=['timestamp', 'request', 'code', 'level', 'event']),
},
},
"handlers": {
Expand All @@ -166,20 +167,17 @@
# 2. You might also want to use different logging configurations depending of the environment.
# Different files (local.py, tests.py, production.py, ci.py, etc.) or only conditions.
# See https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings
"console": {
"class": "logging.StreamHandler",
"formatter": "key_value",
},
"json_file": {
"class": "logging.StreamHandler",
# "filename": "logs/json.log",
"formatter": "json_formatter",
}
"console_out": console_stdout_handler,
"console_err": console_stderr_handler,
"json_out": json_stdout_handler,
"json_err": json_stderr_handler,
},
"loggers": {
"django_structlog": {
"handlers": ["json_file" if os.getenv("DOMAIN_NAME", False) else "console"],
"handlers": ["json_out", "json_err"] if os.getenv("DOMAIN_NAME", False)
else ["console_out", "console_err"],
"level": "INFO",
'propagate': False,
}
}
}
Expand All @@ -189,7 +187,7 @@
structlog.contextvars.merge_contextvars,
structlog.stdlib.filter_by_level,
structlog.processors.TimeStamper(fmt="iso"),
# structlog.stdlib.add_logger_name,
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
structlog.processors.StackInfoRenderer(),
Expand All @@ -199,4 +197,4 @@
],
logger_factory=structlog.stdlib.LoggerFactory(),
cache_logger_on_first_use=True,
)
)

0 comments on commit a6f1d86

Please sign in to comment.