8000 Allow to rename standard field names · madzak/python-json-logger@faba0c2 · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Dec 21, 2024. It is now read-only.

Commit faba0c2

Browse files
committed
Allow to rename standard field names
1 parent feeda9c commit faba0c2

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/pythonjsonlogger/jsonlogger.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ def __init__(self, *args, **kwargs):
8888
that will be used to customize the indent of the output json.
8989
:param prefix: an optional string prefix added at the beginning of
9090
the formatted string
91+
:param rename_fields: an optional dict, used to rename field names in the output.
92+
Rename message to @message: {'message': '@message'}
9193
:param json_indent: indent parameter for json.dumps
9294
:param json_ensure_ascii: ensure_ascii parameter for json.dumps
9395
:param reserved_attrs: an optional list of fields that will be skipped when
@@ -104,6 +106,7 @@ def __init__(self, *args, **kwargs):
104106
self.json_indent = kwargs.pop("json_indent", None)
105107
self.json_ensure_ascii = kwargs.pop("json_ensure_ascii", True)
106108
self.prefix = kwargs.pop("prefix", "")
109+
self.rename_fields = kwargs.pop("rename_fields", {})
107110
reserved_attrs = kwargs.pop("reserved_attrs", RESERVED_ATTRS)
108111
self.reserved_attrs = dict(zip(reserved_attrs, reserved_attrs))
109112
self.timestamp = kwargs.pop("timestamp", False)
@@ -148,7 +151,10 @@ def add_fields(self, log_record, record, message_dict):
148151
Override this method to implement custom logic for adding fields.
149152
"""
150153
for field in self._required_fields:
151-
log_record[field] = record.__dict__.get(field)
154+
if field in self.rename_fields:
155+
log_record[self.rename_fields[field]] = record.__dict__.get(field)
156+
else:
157+
log_record[field] = record.__dict__.get(field)
152158
log_record.update(message_dict)
153159
merge_record_extra(record, log_record, reserved=self._skip_fields)
154160

tests/tests.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ def testDefaultFormat(self):
4242

4343
self.assertEqual(logJson["message"], msg)
4444

45+
def testRenameBaseField(self):
46+
fr = jsonlogger.JsonFormatter(rename_fields={'message': '@message'})
47+
self.logHandler.setFormatter(fr)
48+
49+
msg = "testing logging format"
50+
self.logger.info(msg)
51+
logJson = json.loads(self.buffer.getvalue())
52+
53+
self.assertEqual(logJson["@message"], msg)
54+
4555
def testFormatKeys(self):
4656
supported_keys = [
4757
'asctime',

0 commit comments

Comments
 (0)
0