1+ # -*- coding: utf-8 -*-
2+
13import logging
2- import os
3- import sys
4- import msgpack
54import socket
6- import threading
75
86try :
9- import json
10- except ImportError :
117 import simplejson as json
8+ except ImportError :
9+ import json
1210
1311from fluent import sender
1412
13+
1514class FluentRecordFormatter (object ):
1615 def __init__ (self ):
1716 self .hostname = socket .gethostname ()
1817
1918 def format (self , record ):
20- data = {
21- 'sys_host' : self .hostname ,
22- 'sys_name' : record .name ,
23- 'sys_module' : record .module ,
24- # 'sys_lineno' : record.lineno,
25- # 'sys_levelno' : record.levelno,
26- # 'sys_levelname' : record.levelname,
27- # 'sys_filename' : record.filename,
28- # 'sys_funcname' : record.funcName,
29- # 'sys_exc_info' : record.exc_info,
30- }
19+ data = {'sys_host' : self .hostname ,
20+ 'sys_name' : record .name ,
21+ 'sys_module' : record .module ,
22+ # 'sys_lineno': record.lineno,
23+ # 'sys_levelno': record.levelno,
24+ # 'sys_levelname': record.levelname,
25+ # 'sys_filename': record.filename,
26+ # 'sys_funcname': record.funcName,
27+ # 'sys_exc_info': record.exc_info,
28+ }
3129 # if 'sys_exc_info' in data and data['sys_exc_info']:
3230 # data['sys_exc_info'] = self.formatException(data['sys_exc_info'])
3331
@@ -40,36 +38,41 @@ def _structuring(self, data, msg):
4038 elif isinstance (msg , str ):
4139 try :
4240 self ._add_dic (data , json .loads (str (msg )))
43- except :
41+ except ( ValueError , json . JSONDecodeError ) :
4442 pass
4543
46- def _add_dic (self , data , dic ):
47- for k , v in dic .items ():
48- if isinstance (k , str ) or isinstance (k , unicode ):
49- data [str (k )] = v
44+ @staticmethod
45+ def _add_dic (data , dic ):
46+ for key , value in dic .items ():
47+ if isinstance (key , basestring ):
48+ data [str (key )] = value
49+
5050
5151class FluentHandler (logging .Handler ):
5252 '''
5353 Logging Handler for fluent.
5454 '''
5555 def __init__ (self ,
56- tag ,
57- host = 'localhost' ,
58- port = 24224 ,
59- timeout = 3.0 ,
60- verbose = False ):
56+ tag ,
57+ host = 'localhost' ,
58+ port = 24224 ,
59+ timeout = 3.0 ,
60+ verbose = False ):
6161
6262 self .tag = tag
6363 self .sender = sender .FluentSender (tag ,
6464 host = host , port = port ,
6565 timeout = timeout , verbose = verbose )
66- self .fmt = FluentRecordFormatter ()
6766 logging .Handler .__init__ (self )
6867
6968 def emit (self , record ):
70- if record .levelno < self .level : return
71- data = self .fmt .format (record )
69+ data = self .format (record )
7270 self .sender .emit (None , data )
7371
74- def _close (self ):
75- self .sender ._close ()
72+ def close (self ):
73+ self .acquire ()
74+ try :
75+ self .sender ._close ()
76+ logging .Handler .close (self )
77+ finally :
78+ self .release ()
0 commit comments