Skip to content

Commit

Permalink
Merge pull request #2 from mitodl/edx-logging
Browse files Browse the repository at this point in the history
Adding initial pass of extending logging configuration for edx-platform
  • Loading branch information
blarghmatey authored Sep 14, 2021
2 parents 3867a02 + cb9c59e commit 5b49451
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 3 deletions.
25 changes: 24 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ license = "BSD-3-Clause"

[tool.poetry.dependencies]
python = "^3.8"
sentry-sdk = "^1.3.1"
Django = ">2.0"
edx-django-utils = "^4.0.0"
python-json-logger = "^2.0.2"
sentry-sdk = "^1.3.1"
systemd-python = ">=234"

[tool.poetry.dev-dependencies]
wemake-python-styleguide = "^0.15.3"
Expand Down
22 changes: 22 additions & 0 deletions src/ol_openedx_logging/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
python_library(
name="edx_logging",
dependencies=[
"src/ol_openedx_logging/settings",
"//:python-json-logger",
]
)

python_distribution(
name="logging_package",
dependencies=[":edx_logging"],
provides=setup_py(
name="ol-openedx-logging",
version="0.1.0",
description="An Open edX plugin to customize the logging configuration used by the edx-platform application",
entry_points={
"lms.djangoapp": ["ol_openedx_logging = ol_openedx_logging.app:EdxLoggingLMS"],
"cms.djangoapp": ["ol_openedx_logging = ol_openedx_logging.app:EdxLoggingCMS"]
}
),
setup_py_commands=["sdist", "bdist_wheel"]
)
Empty file.
21 changes: 21 additions & 0 deletions src/ol_openedx_logging/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from django.apps import AppConfig


class EdxLoggingLMS(AppConfig):
name = "ol_openedx_logging"
verbose_name = "Log customization support for Open edX platform"
plugin_app = {
"settings_config": {
"lms.djangoapp": {"production": {"relative_path": "settings.production"}}
}
}


class EdxLoggingCMS(AppConfig):
name = "ol_openedx_logging"
verbose_name = "Log customization support for Open edX platform"
plugin_app = {
"settings_config": {
"cms.djangoapp": {"production": {"relative_path": "settings.production"}}
}
}
1 change: 1 addition & 0 deletions src/ol_openedx_logging/settings/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
python_library()
Empty file.
46 changes: 46 additions & 0 deletions src/ol_openedx_logging/settings/production.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from typing import Any, Dict

MEGABYTE = 1024 * 1024


def _load_env_tokens(edx_settings, default_settings: Dict[str, Any]) -> Dict[str, Any]:
configured_tokens = getattr(edx_settings, "ENV_TOKENS", {})
default_settings.update(configured_tokens)
return default_settings


def plugin_settings(edx_settings):
env_tokens = _load_env_tokens(
edx_settings,
{
"EDXAPP_LOG_LEVEL": "INFO",
"EDXAPP_LOG_FILE_PATH": "/var/log/edxapp/app.log",
"EDXAPP_LOG_FILE_MAX_MEGABYTES": 10,
},
)
edx_logging = getattr(edx_settings, "LOGGING", {})
edx_log_level = env_tokens["EDXAPP_LOG_LEVEL"]

edx_logging["formatters"]["json_format"] = {
"()": "pythonjsonlogger.jsonlogger.JsonFormatter",
"timestamp": True,
"reserved_attrs": [], # Add all log attributes to JSON object
}

edx_logging["handlers"]["file"] = {
"level": edx_log_level,
"class": "logging.handlers.RotatingFileHandler",
"filename": env_tokens["EDXAPP_LOG_FILE_PATH"],
"formatter": "json_format",
"backupCount": 3,
"mode": "a",
"maxBytes": MEGABYTE * env_tokens["EDXAPP_LOG_FILE_MAX_MEGABYTES"],
}

edx_logging["loggers"][""] = {
"handlers": ["console", "local", "file"],
"level": edx_log_level,
"propagate": False,
}

edx_settings.LOGGING = edx_logging
2 changes: 1 addition & 1 deletion src/ol_openedx_sentry/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ python_library(

python_distribution(
name="sentry_package",
dependencies=[":sentry_app", "src/ol_openedx_sentry/settings:sentry_settings"],
dependencies=[":sentry_app"],
provides=setup_py(
name="ol-openedx-sentry",
version="0.1.0",
Expand Down

0 comments on commit 5b49451

Please sign in to comment.