Skip to content

Commit 9b0ac3c

Browse files
committed
Cannot use logger while Django settings are running
1 parent e36faa8 commit 9b0ac3c

4 files changed

Lines changed: 46 additions & 21 deletions

File tree

config/django/base.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,13 @@
174174

175175
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
176176

177+
from config.settings.loggers.settings import * # noqa
178+
from config.settings.loggers.setup import LoggersSetup # noqa
179+
180+
INSTALLED_APPS, MIDDLEWARE = LoggersSetup.setup_settings(INSTALLED_APPS, MIDDLEWARE)
181+
LoggersSetup.setup_structlog()
182+
LOGGING = LoggersSetup.setup_logging()
183+
177184
from config.settings.celery import * # noqa
178185
from config.settings.cors import * # noqa
179186
from config.settings.email_sending import * # noqa
@@ -188,12 +195,5 @@
188195

189196
INSTALLED_APPS, MIDDLEWARE = DebugToolbarSetup.do_settings(INSTALLED_APPS, MIDDLEWARE)
190197

191-
from config.settings.loggers.settings import * # noqa
192-
from config.settings.loggers.setup import LoggersSetup # noqa
193-
194-
INSTALLED_APPS, MIDDLEWARE = LoggersSetup.setup_settings(INSTALLED_APPS, MIDDLEWARE)
195-
LoggersSetup.setup_structlog()
196-
LOGGING = LoggersSetup.setup_logging()
197-
198198

199199
SHELL_PLUS_IMPORTS = ["from styleguide_example.blog_examples.print_qs_in_shell.utils import print_qs"]

config/settings/debug_toolbar/setup.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
import structlog
21
from django.urls import include, path
32

4-
logger = structlog.getLogger("styleguide_example.configuration")
5-
63

74
def show_toolbar(*args, **kwargs) -> bool:
8-
log = logger.bind()
9-
105
"""
116
The general idea is the following:
127
@@ -31,7 +26,6 @@ def show_toolbar(*args, **kwargs) -> bool:
3126
try:
3227
import debug_toolbar # noqa
3328
except ImportError:
34-
log.info("django_debug_toolbar.setup", message="No installation found for: django_debug_toolbar")
3529
return False
3630

3731
return True
@@ -44,10 +38,7 @@ class DebugToolbarSetup:
4438

4539
@staticmethod
4640
def do_settings(INSTALLED_APPS, MIDDLEWARE, middleware_position=None):
47-
log = logger.bind()
48-
4941
_show_toolbar: bool = show_toolbar()
50-
log.info("django_debuhg_toolbar.setup", message=f"Django Debug Toolbar in use: {_show_toolbar}")
5142

5243
if not _show_toolbar:
5344
return INSTALLED_APPS, MIDDLEWARE
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
import logging
2+
from enum import Enum
3+
4+
from config.env import env, env_to_enum
5+
6+
7+
class LoggingFormat(Enum):
8+
DEV = "dev"
9+
JSON = "json"
10+
LOGFMT = "logfmt"
11+
12+
13+
LOGGING_FORMAT = env_to_enum(LoggingFormat, env("LOGGING_FORMAT", default=LoggingFormat.DEV.value))
214

315
DJANGO_STRUCTLOG_STATUS_4XX_LOG_LEVEL = logging.INFO
416
DJANGO_STRUCTLOG_CELERY_ENABLED = True

config/settings/loggers/setup.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import structlog
44

5+
logger = structlog.getLogger("styleguide_example.configuration")
6+
57

68
class IgnoreFilter(logging.Filter):
79
def filter(self, record):
@@ -60,17 +62,37 @@ def setup_structlog():
6062

6163
@staticmethod
6264
def setup_logging():
65+
from django.conf import settings
66+
67+
from config.settings.loggers.settings import LoggingFormat
68+
69+
logging_format = settings.LOGGING_FORMAT
70+
formatter = "dev"
71+
72+
if logging_format == LoggingFormat.DEV:
73+
formatter = "dev"
74+
75+
if logging_format == LoggingFormat.JSON:
76+
formatter = "json"
77+
78+
if logging_format == LoggingFormat.LOGFMT:
79+
formatter = "logfmt"
80+
6381
return {
6482
"version": 1,
6583
"disable_existing_loggers": False,
6684
"formatters": {
67-
"json_formatter": {
85+
"dev": {
6886
"()": structlog.stdlib.ProcessorFormatter,
69-
"processor": structlog.processors.JSONRenderer(),
87+
"processor": structlog.dev.ConsoleRenderer(),
7088
},
71-
"plain_console": {
89+
"logfmt": {
7290
"()": structlog.stdlib.ProcessorFormatter,
73-
"processor": structlog.dev.ConsoleRenderer(),
91+
"processor": structlog.processors.LogfmtRenderer(),
92+
},
93+
"json": {
94+
"()": structlog.stdlib.ProcessorFormatter,
95+
"processor": structlog.processors.JSONRenderer(),
7496
},
7597
},
7698
"filters": {
@@ -90,7 +112,7 @@ def setup_logging():
90112
# See https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings
91113
"console": {
92114
"class": "logging.StreamHandler",
93-
"formatter": "plain_console",
115+
"formatter": formatter,
94116
}
95117
},
96118
"loggers": {

0 commit comments

Comments
 (0)