Package backend :: Package daemons :: Module log
[hide private]
[frames] | no frames]

Source Code for Module backend.daemons.log

 1  # coding: utf-8 
 2   
 3  from __future__ import print_function 
 4  from __future__ import unicode_literals 
 5  from __future__ import division 
 6  from __future__ import absolute_import 
 7   
 8  import logging 
 9  from multiprocessing import Process 
10  import os 
11  import sys 
12  import time 
13  from setproctitle import setproctitle 
14   
15   
16 -class CoprBackendLog(Process):
17 18 """Log mechanism where items from the events queue get recorded 19 20 :param Bunch opts: backend config 21 :param events: multiprocessing.Queue to listen 22 for events from other backend components 23 24 """ 25
26 - def __init__(self, opts, events):
27 28 # base class initialization 29 Process.__init__(self, name="logger") 30 31 self.opts = opts 32 self.events = events 33 34 logdir = os.path.dirname(self.opts.logfile) 35 if not os.path.exists(logdir): 36 os.makedirs(logdir, mode=0o750)
37
38 - def setup_log_handler(self):
39 """ 40 Configures standard python logger 41 """ 42 sys.stderr.write("Running setup handler {} \n".format(self.opts)) 43 # setup a log file to write to 44 logging.basicConfig(filename=self.opts.logfile, level=logging.DEBUG) 45 46 self.log({"when": time.time(), "who": self.__class__.__name__, 47 "what": "Logger initiated"})
48
49 - def log(self, event):
50 """ 51 Format event into the log message 52 53 :param event: dict-like object 54 55 Expected **event** keys: 56 - `when`: unixtime 57 - `who`: event producer [worker|logger|job|main] 58 - `what`: content 59 """ 60 when = time.strftime("%F %T", time.gmtime(event["when"])) 61 msg = "{0} : {1}: {2}".format(when, 62 event["who"], 63 event["what"].strip()) 64 try: 65 if self.opts.verbose: 66 sys.stderr.write("{0}\n".format(msg)) 67 sys.stderr.flush() 68 logging.debug(msg) 69 70 except (IOError, OSError) as e: 71 72 sys.stderr.write("Could not write to logfile {0} - {1}\n".format( 73 self.opts.logfile, e))
74 75 # event format is a dict {when:time, who:[worker|logger|job|main], 76 # what:str}
77 - def run(self):
78 """ 79 Starts logger process 80 """ 81 setproctitle("CoprLog") 82 self.setup_log_handler() 83 84 try: 85 while True: 86 event = self.events.get() 87 if "when" in event and "who" in event and "what" in event: 88 self.log(event) 89 except KeyboardInterrupt: 90 return
91