88from enum import IntEnum
99import requests
1010import arrow
11- from apscheduler .schedulers .background import BackgroundScheduler
1211from .common import API_URL
1312
1413class _Log ():
1514def __init__ (self ,interceptor ):
1615self .path = '/log'
1716self .interceptor = interceptor
18- self ._timer = None
19- self .entries = []
2017self .level = Level .INFO
2118self .fields = {}
22- self .batch_size = 60
23- self .dispatch_interval = 60
2419
2520# Automatically report uncaught fatal error
2621def excepthook (type ,value ,trace ):
2722self .fatal (message = str (value ),stack_trace = '' .join (traceback .format_tb (trace )))
2823sys .__excepthook__ (type ,value ,trace )
2924sys .excepthook = excepthook
3025
31- def _dispatch (self ):
32- if len (self .entries )== 0 :
33- return
34- try :
35- r = requests .post (API_URL + self .path ,auth = self .interceptor ,data = json .dumps (self .entries ))
36- if not 200 <= r .status_code < 300 :
37- data = r .json ()
38- raise LogError (data ['code' ],data ['message' ])
39- finally :
40- self .entries .clear ()
26+ def _dispatch (self ,entry ):
27+ r = requests .post (API_URL + self .path ,auth = self .interceptor ,data = json .dumps (entry ))
28+ if not 200 <= r .status_code < 300 :
29+ data = r .json ()
30+ raise LogError (data ['code' ],data ['message' ])
4131
4232def add_fields (self ,** kwargs ):
4333self .fields .update (kwargs )
@@ -60,23 +50,14 @@ def fatal(self, **kwargs):
6050def _log (self ,level ,** kwargs ):
6151if level < self .level :
6252return
63-
64- if self ._timer is None :
65- self .timer = BackgroundScheduler ()
66- self .timer .add_job (self ._dispatch ,'interval' ,seconds = self .dispatch_interval )
67- self .timer .start ()
6853
6954kwargs ['time' ]= arrow .now ().format ('YYYY-MM-DDTHH:mm:ss.SSSZ' )
70- for k ,v in self .fields .items ():
71- kwargs [k ]= v
7255kwargs ['level' ]= level .name
73- self .entries .append (kwargs )
7456
75- if level == Level .FATAL or len (self .entries )>= self .batch_size :
76- try :
77- self ._dispatch ()
78- except LogError as err :
79- print ('log error: code={}, message={}' .format (err .code ,err .message ))
57+ try :
58+ self ._dispatch (kwargs )
59+ except LogError as err :
60+ print ('log error: code={}, message={}' .format (err .code ,err .message ))
8061
8162class Level (IntEnum ):
8263DEBUG = 0