Skip to content

Commit df922fb

Browse files
committed
[core] Rename LogRecord/log_record to LogData/log_data
Fixes #38
1 parent 7f0a6bb commit df922fb

File tree

7 files changed

+64
-44
lines changed

7 files changed

+64
-44
lines changed

docs/changelog.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
- Support `DictConfigurator` prefixes for `rename_fields` and `static_fields`. [#45](https://github.com/nhairs/python-json-logger/pull/45)
1111
- Allows using values like `ext://sys.stderr` in `fileConfig`/`dictConfig` value fields.
1212

13+
### Changed
14+
- Rename `pythonjsonlogger.core.LogRecord` and `log_record` arguemtns to avoid confusion / overlapping with `logging.LogRecord`. [#38](https://github.com/nhairs/python-json-logger/issues/38)
15+
- Affects arguments to `pythonjsonlogger.core.BaseJsonFormatter` (and any child classes).
16+
- `serialize_log_record`
17+
- `add_fields`
18+
- `jsonify_log_record`
19+
- `process_log_record`
20+
- Note: functions referring to `log_record` have **not** had their function name changed.
21+
1322
### Removed
1423
- Remove support for providing strings instead of objects when instantiating formatters. Instead use the `DictConfigurator` `ext://` prefix format when using `fileConfig`/`dictConfig`. [#47](https://github.com/nhairs/python-json-logger/issues/47)
1524
- Affects `pythonjsonlogger.json.JsonFormatter`: `json_default`, `json_encoder`, `json_serializer`.

docs/cookbook.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ You can modify the `dict` of data that will be logged by overriding the `process
3232

3333
```python
3434
class SillyFormatter(JsonFormatter):
35-
def process_log_record(log_record):
36-
new_record = {k[::-1]: v for k, v in log_record.items()}
35+
def process_log_record(log_data):
36+
new_record = {k[::-1]: v for k, v in log_data.items()}
3737
return new_record
3838
```
3939

@@ -119,9 +119,9 @@ Another method would be to create a custom formatter class and override the `pro
119119
## -----------------------------------------------------------------------------
120120
# Reuse REQUEST_ID stuff from solution 2
121121
class MyFormatter(JsonFormatter):
122-
def process_log_record(self, log_record):
123-
log_record["request_id"] = get_request_id()
124-
return log_record
122+
def process_log_record(self, log_data):
123+
log_data["request_id"] = get_request_id()
124+
return log_data
125125

126126
handler.setFormatter(MyFormatter())
127127

src/pythonjsonlogger/core.py

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,11 @@
7171

7272
## Type Aliases
7373
## -----------------------------------------------------------------------------
74-
LogRecord: TypeAlias = Dict[str, Any]
75-
"""Type alias"""
74+
LogData: TypeAlias = Dict[str, Any]
75+
"""Type alias
76+
77+
*Changed in 4.0*: renamed from `LogRecord` to `LogData`
78+
"""
7679

7780

7881
### FUNCTIONS
@@ -115,7 +118,7 @@ class BaseJsonFormatter(logging.Formatter):
115118
116119
*Changed in 3.2*: `defaults` argument is no longer ignored.
117120
118-
*Added in UNRELEASED*: `exc_info_as_array` and `stack_info_as_array` options are added.
121+
*Added in 4.0*: `exc_info_as_array` and `stack_info_as_array` options are added.
119122
"""
120123

121124
_style: Union[logging.PercentStyle, str] # type: ignore[assignment]
@@ -249,11 +252,11 @@ def format(self, record: logging.LogRecord) -> str:
249252
if record.stack_info and not message_dict.get("stack_info"):
250253
message_dict["stack_info"] = self.formatStack(record.stack_info)
251254

252-
log_record: LogRecord = {}
253-
self.add_fields(log_record, record, message_dict)
254-
log_record = self.process_log_record(log_record)
255+
log_data: LogData = {}
256+
self.add_fields(log_data, record, message_dict)
257+
log_data = self.process_log_record(log_data)
255258

256-
return self.serialize_log_record(log_record)
259+
return self.serialize_log_record(log_data)
257260

258261
## JSON Formatter Specific Methods
259262
## -------------------------------------------------------------------------
@@ -287,17 +290,19 @@ def parse(self) -> List[str]:
287290

288291
return []
289292

290-
def serialize_log_record(self, log_record: LogRecord) -> str:
291-
"""Returns the final representation of the log record.
293+
def serialize_log_record(self, log_data: LogData) -> str:
294+
"""Returns the final representation of the data to be logged
292295
293296
Args:
294-
log_record: the log record
297+
log_data: the data
298+
299+
*Changed in 4.0*: `log_record` renamed to `log_data`
295300
"""
296-
return self.prefix + self.jsonify_log_record(log_record)
301+
return self.prefix + self.jsonify_log_record(log_data)
297302

298303
def add_fields(
299304
self,
300-
log_record: Dict[str, Any],
305+
log_data: Dict[str, Any],
301306
record: logging.LogRecord,
302307
message_dict: Dict[str, Any],
303308
) -> None:
@@ -306,65 +311,71 @@ def add_fields(
306311
This method can be overridden to implement custom logic for adding fields.
307312
308313
Args:
309-
log_record: data that will be logged
314+
log_data: data that will be logged
310315
record: the record to extract data from
311316
message_dict: dictionary that was logged instead of a message. e.g
312317
`logger.info({"is_this_message_dict": True})`
318+
319+
*Changed in 4.0*: `log_record` renamed to `log_data`
313320
"""
314321
for field in self.defaults:
315-
log_record[self._get_rename(field)] = self.defaults[field]
322+
log_data[self._get_rename(field)] = self.defaults[field]
316323

317324
for field in self._required_fields:
318-
log_record[self._get_rename(field)] = record.__dict__.get(field)
325+
log_data[self._get_rename(field)] = record.__dict__.get(field)
319326

320327
for data_dict in [self.static_fields, message_dict]:
321328
for key, value in data_dict.items():
322-
log_record[self._get_rename(key)] = value
329+
log_data[self._get_rename(key)] = value
323330

324331
merge_record_extra(
325332
record,
326-
log_record,
333+
log_data,
327334
reserved=self._skip_fields,
328335
rename_fields=self.rename_fields,
329336
)
330337

331338
if self.timestamp:
332339
key = self.timestamp if isinstance(self.timestamp, str) else "timestamp"
333-
log_record[self._get_rename(key)] = datetime.fromtimestamp(
340+
log_data[self._get_rename(key)] = datetime.fromtimestamp(
334341
record.created, tz=timezone.utc
335342
)
336343

337344
if self.rename_fields_keep_missing:
338345
for field in self.rename_fields.values():
339-
if field not in log_record:
340-
log_record[field] = None
346+
if field not in log_data:
347+
log_data[field] = None
341348
return
342349

343350
def _get_rename(self, key: str) -> str:
344351
return self.rename_fields.get(key, key)
345352

346353
# Child Methods
347354
# ..........................................................................
348-
def jsonify_log_record(self, log_record: LogRecord) -> str:
349-
"""Convert this log record into a JSON string.
355+
def jsonify_log_record(self, log_data: LogData) -> str:
356+
"""Convert the log data into a JSON string.
350357
351358
Child classes MUST override this method.
352359
353360
Args:
354-
log_record: the data to serialize
361+
log_data: the data to serialize
362+
363+
*Changed in 4.0*: `log_record` renamed to `log_data`
355364
"""
356365
raise NotImplementedError()
357366

358-
def process_log_record(self, log_record: LogRecord) -> LogRecord:
359-
"""Custom processing of the log record.
367+
def process_log_record(self, log_data: LogData) -> LogData:
368+
"""Custom processing of the data to be logged.
360369
361370
Child classes can override this method to alter the log record before it
362371
is serialized.
363372
364373
Args:
365-
log_record: incoming data
374+
log_data: incoming data
375+
376+
*Changed in 4.0*: `log_record` renamed to `log_data`
366377
"""
367-
return log_record
378+
return log_data
368379

369380
def formatException(self, ei) -> Union[str, list[str]]: # type: ignore
370381
"""Format and return the specified exception information.

src/pythonjsonlogger/json.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ def __init__(
9696
self.json_encoder = JsonEncoder
9797
return
9898

99-
def jsonify_log_record(self, log_record: core.LogRecord) -> str:
100-
"""Returns a json string of the log record."""
99+
def jsonify_log_record(self, log_data: core.LogData) -> str:
100+
"""Returns a json string of the log data."""
101101
return self.json_serializer(
102-
log_record,
102+
log_data,
103103
default=self.json_default,
104104
cls=self.json_encoder,
105105
indent=self.json_indent,

src/pythonjsonlogger/msgspec.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ def __init__(
5858
self._encoder = msgspec.json.Encoder(enc_hook=self.json_default)
5959
return
6060

61-
def jsonify_log_record(self, log_record: core.LogRecord) -> str:
62-
"""Returns a json string of the log record."""
63-
return self._encoder.encode(log_record).decode("utf8")
61+
def jsonify_log_record(self, log_data: core.LogData) -> str:
62+
"""Returns a json string of the log data."""
63+
return self._encoder.encode(log_data).decode("utf8")

src/pythonjsonlogger/orjson.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ def __init__(
6262
self.json_indent = json_indent
6363
return
6464

65-
def jsonify_log_record(self, log_record: core.LogRecord) -> str:
66-
"""Returns a json string of the log record."""
65+
def jsonify_log_record(self, log_data: core.LogData) -> str:
66+
"""Returns a json string of the log data."""
6767
opt = orjson.OPT_NON_STR_KEYS
6868
if self.json_indent:
6969
opt |= orjson.OPT_INDENT_2
7070

71-
return orjson.dumps(log_record, default=self.json_default, option=opt).decode("utf8")
71+
return orjson.dumps(log_data, default=self.json_default, option=opt).decode("utf8")

tests/test_formatters.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -380,9 +380,9 @@ def test_log_extra(env: LoggingEnvironment, class_: type[BaseJsonFormatter]):
380380
def test_custom_logic_adds_field(env: LoggingEnvironment, class_: type[BaseJsonFormatter]):
381381
class CustomJsonFormatter(class_): # type: ignore[valid-type,misc]
382382

383-
def process_log_record(self, log_record):
384-
log_record["custom"] = "value"
385-
return super().process_log_record(log_record)
383+
def process_log_record(self, log_data):
384+
log_data["custom"] = "value"
385+
return super().process_log_record(log_data)
386386

387387
env.set_formatter(CustomJsonFormatter())
388388
env.logger.info("message")

0 commit comments

Comments
 (0)