Skip to content

Commit abfcba8

Browse files
dump JSON-log-formatter
1 parent 6b82ca8 commit abfcba8

File tree

4 files changed

+64
-3
lines changed

4 files changed

+64
-3
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import annotations
3+
4+
import json
5+
import logging
6+
from typing import Any
7+
8+
9+
class JSONFormatter(logging.Formatter):
10+
"""
11+
Minimal JSON log formatter compatible with our prior json_log_formatter usage.
12+
"""
13+
14+
_skip_record_keys = {
15+
"name",
16+
"msg",
17+
"args",
18+
"levelname",
19+
"levelno",
20+
"pathname",
21+
"filename",
22+
"module",
23+
"exc_info",
24+
"exc_text",
25+
"stack_info",
26+
"lineno",
27+
"funcName",
28+
"created",
29+
"msecs",
30+
"relativeCreated",
31+
"thread",
32+
"threadName",
33+
"processName",
34+
"process",
35+
"message",
36+
"asctime",
37+
}
38+
39+
def json_record(self, message: str, extra: dict[str, Any], record: logging.LogRecord) -> dict[str, Any]:
40+
payload = dict(extra)
41+
payload["message"] = message
42+
return payload
43+
44+
def to_json(self, record: dict[str, Any]) -> str:
45+
return json.dumps(record, default=self._default_json, separators=(",", ":"))
46+
47+
def format(self, record: logging.LogRecord) -> str:
48+
message = record.getMessage()
49+
extra = self._extract_extra(record)
50+
json_record = self.json_record(message, extra, record)
51+
return self.to_json(json_record)
52+
53+
def _extract_extra(self, record: logging.LogRecord) -> dict[str, Any]:
54+
extras: dict[str, Any] = {}
55+
for key, value in record.__dict__.items():
56+
if key in self._skip_record_keys or key.startswith("_"):
57+
continue
58+
extras[key] = value
59+
return extras
60+
61+
@staticmethod
62+
def _default_json(value: Any) -> str:
63+
return str(value)

core/pioreactor/logging.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from time import sleep
55
from typing import TYPE_CHECKING
66

7-
from json_log_formatter import JSONFormatter # type: ignore
87
from pioreactor import types as pt
98
from pioreactor.config import config
109
from pioreactor.exc import NotAssignedAnExperimentError
10+
from pioreactor.json_log_formatter import JSONFormatter
1111
from pioreactor.whoami import get_assigned_experiment_name
1212
from pioreactor.whoami import get_unit_name
1313
from pioreactor.whoami import UNIVERSAL_EXPERIMENT

core/setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
CORE_REQUIREMENTS = [
99
"click==8.1.7",
1010
"paho-mqtt==2.1.0",
11-
"JSON-log-formatter==0.5.1",
1211
"colorlog==6.7.0",
1312
"msgspec==0.19.0",
1413
"crudini==0.9.5",

requirements/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
click==8.1.7
22
paho-mqtt==2.1.0
3-
JSON-log-formatter==0.5.1
43
colorlog==6.7.0
54
msgspec==0.19.0
65
crudini==0.9.5

0 commit comments

Comments
 (0)