import os import logging from logentries import LogentriesHandler import zmq from common.logging_extra import SwagLogger, SwagFormatter def get_le_handler(): # setup logentries. we forward log messages to it le_token = "e8549616-0798-4d7e-a2ca-2513ae81fa17" return LogentriesHandler(le_token, use_tls=False, verbose=False) class LogMessageHandler(logging.Handler): def __init__(self, formatter): logging.Handler.__init__(self) self.setFormatter(formatter) self.pid = None def connect(self): self.zctx = zmq.Context() self.sock = self.zctx.socket(zmq.PUSH) self.sock.setsockopt(zmq.LINGER, 10) self.sock.connect("ipc:///tmp/logmessage") self.pid = os.getpid() def emit(self, record): if os.getpid() != self.pid: self.connect() msg = self.format(record).rstrip('\n') # print("SEND".format(repr(msg))) try: s = chr(record.levelno)+msg self.sock.send(s.encode('utf8'), zmq.NOBLOCK) except zmq.error.Again: # drop :/ pass def add_logentries_handler(log): """Function to add the logentries handler to swaglog. This can be used to send logs when logmessaged is not running.""" handler = get_le_handler() handler.setFormatter(SwagFormatter(log)) log.addHandler(handler) cloudlog = log = SwagLogger() log.setLevel(logging.DEBUG) outhandler = logging.StreamHandler() log.addHandler(outhandler) log.addHandler(LogMessageHandler(SwagFormatter(log)))