Skip to content

Commit edd7b40

Browse files
authored
feat: add configurable logging level (openedx#152)
* feat: add configurable logging level * chore: bump version to 0.20.0
1 parent 1280580 commit edd7b40

4 files changed

Lines changed: 34 additions & 1 deletion

File tree

CHANGELOG.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ Unreleased
1616

1717
*
1818

19+
0.20.0 - 2025-11-27
20+
********************
21+
22+
Added
23+
=====
24+
25+
* Add configurable logging level for Casbin enforcer via ``CASBIN_LOG_LEVEL`` setting (defaults to WARNING).
26+
27+
1928
0.19.2 - 2025-11-25
2029
********************
2130

openedx_authz/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44

55
import os
66

7-
__version__ = "0.19.2"
7+
__version__ = "0.20.0"
88

99
ROOT_DIRECTORY = os.path.dirname(os.path.abspath(__file__))

openedx_authz/engine/enforcer.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
"""
1717

1818
import logging
19+
from copy import deepcopy
1920
from uuid import uuid4
2021

2122
from casbin import SyncedEnforcer
23+
from casbin.util.log import DEFAULT_LOGGING, configure_logging
2224
from casbin_adapter.enforcer import initialize_enforcer
2325
from django.conf import settings
2426

@@ -154,6 +156,19 @@ def configure_enforcer_auto_save_and_load(cls):
154156

155157
cls.configure_enforcer_auto_save(auto_save_policy)
156158

159+
@classmethod
160+
def _configure_logging(cls) -> None:
161+
"""Configure logging levels for Casbin's internal loggers.
162+
163+
This controls the verbosity of Casbin's policy evaluation and role management
164+
logging. The log level defaults to WARNING if CASBIN_LOG_LEVEL is not set.
165+
"""
166+
log_level = getattr(settings, "CASBIN_LOG_LEVEL", "WARNING")
167+
casbin_logging = deepcopy(DEFAULT_LOGGING)
168+
for logger_name in casbin_logging["loggers"]:
169+
casbin_logging["loggers"][logger_name]["level"] = log_level
170+
configure_logging(casbin_logging)
171+
157172
@classmethod
158173
def load_policy_if_needed(cls):
159174
"""Load policy if the last load version indicates it's needed.
@@ -246,6 +261,10 @@ def _initialize_enforcer(cls) -> SyncedEnforcer:
246261
# Avoid circular import
247262
from openedx_authz.engine.matcher import is_admin_or_superuser_check # pylint: disable=import-outside-toplevel
248263

264+
# Configure logging BEFORE initialize_enforcer() because it creates a ProxyEnforcer
265+
# that doesn't pass logging config and would use Casbin's defaults
266+
cls._configure_logging()
267+
249268
db_alias = getattr(settings, "CASBIN_DB_ALIAS", "default")
250269

251270
try:

openedx_authz/settings/common.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,8 @@ def plugin_settings(settings):
4545
# Set default ContentLibrary model for swappable dependency
4646
if not hasattr(settings, "OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL"):
4747
settings.OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL = "content_libraries.ContentLibrary"
48+
49+
# Set default CASBIN_LOG_LEVEL if not already set.
50+
# This setting defines the logging level for the Casbin enforcer.
51+
if not hasattr(settings, "CASBIN_LOG_LEVEL"):
52+
settings.CASBIN_LOG_LEVEL = "WARNING"

0 commit comments

Comments
 (0)