_json_formatter.py
973 Bytes
import logging
import json
class JsonFormatter(logging.Formatter):
"""
Format every message to be logged as a JSON object
"""
_is_first_line = True
def format(self, record):
"""
Since we don't buffer messages, we always prepend messages with a comma to make
the output JSON-compatible. The only exception is when printing the first line,
so we need to keep track of it.
We assume that all input comes from the OletoolsLoggerAdapter which
ensures that there is a `type` field in the record. Otherwise will have
to add a try-except around the access to `record.type`.
"""
json_dict = dict(msg=record.msg, level=record.levelname)
json_dict['type'] = record.type
formatted_message = ' ' + json.dumps(json_dict)
if self._is_first_line:
self._is_first_line = False
return formatted_message
return ', ' + formatted_message