Skip to content

Commit 8294d3f

Browse files
authored
Improved logging formatting (boostorg#1905)
1 parent 4b8b811 commit 8294d3f

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

config/celery.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import os
22
import datetime
3+
from logging.config import dictConfig
34

45
from celery import Celery
56
from celery.schedules import crontab
7+
from celery.signals import setup_logging
8+
from pythonjsonlogger import jsonlogger
69

710
# set the default Django settings module for the 'celery' program.
811
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
@@ -19,6 +22,40 @@
1922
app.autodiscover_tasks()
2023

2124

25+
@setup_logging.connect
26+
def config_loggers(*args, **kwags):
27+
"""Configure Celery logging with JSON default, readable for local development."""
28+
from django.conf import settings
29+
30+
# production
31+
json_formatter = {
32+
"()": jsonlogger.JsonFormatter,
33+
"format": "%(name)s %(levelname)s %(filename)s:%(lineno)d %(message)s",
34+
}
35+
# local development
36+
text_formatter = {
37+
"format": "%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s",
38+
"datefmt": "%Y-%m-%d %H:%M:%S",
39+
}
40+
dictConfig(
41+
{
42+
"version": 1,
43+
"disable_existing_loggers": False,
44+
"formatters": {"json": json_formatter, "text": text_formatter},
45+
"handlers": {
46+
"console": {
47+
"class": "logging.StreamHandler",
48+
"formatter": "text" if settings.LOCAL_DEVELOPMENT else "json",
49+
},
50+
},
51+
"root": {
52+
"level": "INFO",
53+
"handlers": ["console"],
54+
},
55+
}
56+
)
57+
58+
2259
@app.task(bind=True)
2360
def debug_task(self):
2461
print(f"Request: {self.request!r}")

config/settings.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,19 @@
251251

252252

253253
handler = logging.StreamHandler(sys.stdout)
254-
handler.setFormatter(jsonlogger.JsonFormatter())
254+
handler.setFormatter(
255+
jsonlogger.JsonFormatter(
256+
"%(name)s %(levelname)s %(filename)s:%(lineno)d %(message)s"
257+
)
258+
)
259+
260+
if LOCAL_DEVELOPMENT:
261+
handler.setFormatter(
262+
logging.Formatter(
263+
"%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s",
264+
datefmt="%Y-%m-%d %H:%M:%S",
265+
)
266+
)
255267

256268
root.addHandler(handler)
257269

versions/management/commands/import_archives_release_data.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import requests
44

55
from django.conf import settings
6+
import structlog
67

78
from versions.models import Version
89
from versions.releases import (
@@ -17,6 +18,8 @@
1718

1819
logger = get_logger(__name__)
1920

21+
logger = structlog.get_logger()
22+
2023

2124
@click.command()
2225
@click.option("--release", is_flag=False, help="Release name")
@@ -71,7 +74,7 @@ def command(release: str, new: bool):
7174
data = get_archives_download_data(url)
7275
download_data.append(data)
7376
except (requests.exceptions.HTTPError, ValueError):
74-
print(f"Skipping {url}; error retrieving download data")
77+
logger.warning(f"Skipping {url}; error retrieving download data")
7578
continue
7679
logger.info(f"Data for {v.name=} at {url=}: {download_data=}")
7780
store_release_downloads_for_version(v, download_data)

0 commit comments

Comments
 (0)