@@ -26,9 +26,12 @@ class FluentRecordFormatter(logging.Formatter, object):
2626 :param datefmt: strftime()-compatible date/time format string.
2727 :param style: '%', '{' or '$' (used only with Python 3.2 or above)
2828 :param fill_missing_fmt_key: if True, do not raise a KeyError if the format
29- key is not found. Put None if not found.s
29+ key is not found. Put None if not found.
30+ :param format_json: if True, will attempt to parse message as json. If not,
31+ will use message as-is. Defaults to True
3032 """
31- def __init__ (self , fmt = None , datefmt = None , style = '%' , fill_missing_fmt_key = False ):
33+
34+ def __init__ (self , fmt = None , datefmt = None , style = '%' , fill_missing_fmt_key = False , format_json = True ):
3235 super (FluentRecordFormatter , self ).__init__ (None , datefmt )
3336
3437 if sys .version_info [0 :2 ] >= (3 , 2 ) and style != '%' :
@@ -57,6 +60,11 @@ def __init__(self, fmt=None, datefmt=None, style='%', fill_missing_fmt_key=False
5760 else :
5861 self ._fmt_dict = fmt
5962
63+ if format_json :
64+ self ._format_msg = self ._format_msg_json
65+ else :
66+ self ._format_msg = self ._format_msg_default
67+
6068 self .hostname = socket .gethostname ()
6169
6270 self .fill_missing_fmt_key = fill_missing_fmt_key
@@ -107,18 +115,23 @@ def _structuring(self, data, record):
107115 if isinstance (msg , dict ):
108116 self ._add_dic (data , msg )
109117 elif isinstance (msg , basestring ):
110- try :
111- json_msg = json .loads (str (msg ))
112- if isinstance (json_msg , dict ):
113- self ._add_dic (data , json_msg )
114- else :
115- self ._add_dic (data , {'message' : str (json_msg )})
116- except ValueError :
117- msg = record .getMessage ()
118- self ._add_dic (data , {'message' : msg })
118+ self ._add_dic (data , self ._format_msg (record , msg ))
119119 else :
120120 self ._add_dic (data , {'message' : msg })
121121
122+ def _format_msg_json (self , record , msg ):
123+ try :
124+ json_msg = json .loads (str (msg ))
125+ if isinstance (json_msg , dict ):
126+ return json_msg
127+ else :
128+ return {'message' : str (json_msg )}
129+ except ValueError :
130+ return self ._format_msg_default (record , msg )
131+
132+ def _format_msg_default (self , record , msg ):
133+ return {'message' : record .getMessage ()}
134+
122135 @staticmethod
123136 def _add_dic (data , dic ):
124137 for key , value in dic .items ():
@@ -130,6 +143,7 @@ class FluentHandler(logging.Handler):
130143 '''
131144 Logging Handler for fluent.
132145 '''
146+
133147 def __init__ (self ,
134148 tag ,
135149 host = 'localhost' ,
0 commit comments