diff --git a/logstash/formatter.py b/logstash/formatter.py index 998d6ee..914022d 100644 --- a/logstash/formatter.py +++ b/logstash/formatter.py @@ -78,8 +78,35 @@ def format_exception(cls, exc_info): @classmethod def serialize(cls, message): + message = self.json_sanitize_message(message) return json.dumps(message) + @classmethod + def json_sanitize_message(cls, message): + if type(message) is dict: + message=message.copy() + for k, v in message.items(): + message[k] = self.json_sanitize_message(v) + return message + + elif type(message) in (list, ): + message=list(message) + for i in range(len(message)): + message[i] = self.json_sanitize_message(message[i]) + return message + + elif type(message) in (datetime.datetime, datetime.date): + return message.isoformat() + + elif type(message) is ObjectId: + return str(message) + + elif type(message) is bytes: + return str(message) + + return message + + class LogstashFormatterVersion0(LogstashFormatterBase): version = 0