diff --git a/.gitignore b/.gitignore index 72364f9..9e00340 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,6 @@ ENV/ # Rope project settings .ropeproject + +# PyCharm project settings +.idea/ diff --git a/bunyan/formatter.py b/bunyan/formatter.py index 6cbf391..5142f52 100644 --- a/bunyan/formatter.py +++ b/bunyan/formatter.py @@ -4,7 +4,7 @@ Provides logging compatibility with Bunyan standard and enceforth CLI. """ import datetime -import json +import simplejson as json import logging import re import socket @@ -16,6 +16,7 @@ try: from collections import OrderedDict except ImportError: + OrderedDict = dict pass def object_startswith(key, value): @@ -127,7 +128,7 @@ def jsonify_log_record(self, log_record): """ Returns a json string of the log record. """ - return json.dumps(log_record, default = self.json_default) + return json.dumps(log_record, default = self.json_default, ignore_nan=True) def format(self, record): """ @@ -137,7 +138,12 @@ def format(self, record): if isinstance(record.msg, dict): message_dict = record.msg - record.message = None + if len(record.args) == 1 and isinstance(record.args[0], str): + # bunyan style log method: fields object + msg string + record.msg = record.args[0] + record.message = record.args[0] % message_dict + else: + record.message = None else: record.message = record.getMessage() # only format time if needed @@ -149,10 +155,7 @@ def format(self, record): if record.exc_info and not message_dict.get('exc_info'): message_dict['exc_info'] = self.formatException(record.exc_info) - try: - log_record = OrderedDict() - except NameError: - log_record = {} + log_record = OrderedDict() self.add_fields(log_record, record, message_dict) log_record = self.process_log_record(log_record) diff --git a/requirements.txt b/requirements.txt index e69de29..322630e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1 @@ +simplejson