8
8
from enum import IntEnum
9
9
import requests
10
10
import arrow
11
- from apscheduler .schedulers .background import BackgroundScheduler
12
11
from .common import API_URL
13
12
14
13
class _Log ():
15
14
def __init__ (self , interceptor ):
16
15
self .path = '/log'
17
16
self .interceptor = interceptor
18
- self ._timer = None
19
- self .entries = []
20
17
self .level = Level .INFO
21
18
self .fields = {}
22
- self .batch_size = 60
23
- self .dispatch_interval = 60
24
19
25
20
# Automatically report uncaught fatal error
26
21
def excepthook (type , value , trace ):
27
22
self .fatal (message = str (value ), stack_trace = '' .join (traceback .format_tb (trace )))
28
23
sys .__excepthook__ (type , value , trace )
29
24
sys .excepthook = excepthook
30
25
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' ])
41
31
42
32
def add_fields (self , ** kwargs ):
43
33
self .fields .update (kwargs )
@@ -60,23 +50,14 @@ def fatal(self, **kwargs):
60
50
def _log (self , level , ** kwargs ):
61
51
if level < self .level :
62
52
return
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 ()
68
53
69
54
kwargs ['time' ] = arrow .now ().format ('YYYY-MM-DDTHH:mm:ss.SSSZ' )
70
- for k , v in self .fields .items ():
71
- kwargs [k ] = v
72
55
kwargs ['level' ] = level .name
73
- self .entries .append (kwargs )
74
56
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 ))
80
61
81
62
class Level (IntEnum ):
82
63
DEBUG = 0
0 commit comments