/ pytlib / utils / logger.py
logger.py
 1  from __future__ import division
 2  from builtins import object
 3  from past.utils import old_div
 4  import ujson as json
 5  from utils.dict_utils import set_deep,get_deep
 6  import sys
 7  
 8  # Singleton class for logging
 9  class Logger(object):
10      instance = None
11  
12      class __Logger(object):
13          def __init__(self,output_file):
14              self.output_file = output_file
15              # raise exception here
16              self.cur_line = {}
17              self.counter = {}
18  
19          def dump_line(self):
20              line = json.dumps(self.cur_line)
21              if self.output_file is None:
22                   sys.stdout.write(line)
23                   sys.stdout.write('\n')
24              else:
25                  with open(self.output_file,'a') as f:
26                      f.write(line)
27                      f.write('\n')
28              self.cur_line = {}
29              self.counter = {}
30  
31          def set(self,key,value):
32              set_deep(self.cur_line,key,value)
33  
34          def average(self,key,value):
35              cur_value = get_deep(self.cur_line,key,0)
36              cur_count = get_deep(self.counter,key,0)
37              set_deep(self.cur_line,key,old_div((float(cur_value)*cur_count+value),(cur_count+1)))
38              set_deep(self.counter,key,cur_count+1)           
39  
40      def __init__(self,output_file=None):
41          if not Logger.instance:
42              Logger.instance = Logger.__Logger(output_file)
43  
44      def __getattr__(self,name):
45          return getattr(self.instance,name)