def __init__(self): self.logger = colorlog.getLogger(__name__) self.logger.setLevel(logging.DEBUG) logging.addLevelName(logging.INFO, 'I') # colorlog.default_log_colors['I'] = "bold_green" logging.addLevelName(logging.CRITICAL, 'C') colorlog.default_log_colors['C'] = "bold_red" logging.addLevelName(logging.DEBUG, 'D') logging.addLevelName(logging.WARNING, 'W') SUCCESS = logging.DEBUG + 1 logging.addLevelName(SUCCESS, 'success') colorlog.default_log_colors['success'] = "bold_green" setattr(self.logger, 'success', lambda message, *args: self.logger._log(SUCCESS, message, args)) # Console log msg setting sh = colorlog.StreamHandler() sh.setLevel(logging.DEBUG + 1) sh_fmt = colorlog.ColoredFormatter('%(log_color)s> %(message)s') sh.setFormatter(sh_fmt) self.logger.addHandler(sh) # File log msg setting self.config = Config() product_name = self.config.get_product_name() folder_name = "{}_Log_{}".format(product_name, datetime.now().year) folder_path = os.path.join(os.getcwd(), folder_name) self._make_sure_dir_exists(folder_path) filename = '{}.txt'.format(datetime.now().strftime("Log %Y%m%d")) self.log_path = os.path.join(folder_path, filename) fh = logging.FileHandler(self.log_path) fmt = logging.Formatter('%(asctime)s, %(levelname)s, %(module)s, %(station)s, %(serial)s, "%(message)s"', datefmt='%Y-%m-%d %H:%M:%S') fh.setFormatter(fmt) que = Queue.Queue(-1) queue_handler = QueueHandler(que) queue_handler.setLevel(logging.INFO) self.logger.addHandler(queue_handler) self.listener = QueueListener(que, fh) self.latest_filter = None
def initialize_logging(level, queue): """Setup logging for a process. Creates a base logger for pywall. Installs a single handler, which will send packets across a queue to the logger process. This function should be called by each of the three worker processes before they start. """ formatter = _get_formatter() logger = logging.getLogger('pywall') logger.setLevel(level) handler = QueueHandler(queue) handler.setLevel(level) handler.setFormatter(formatter) logger.addHandler(handler)
def initMultiprocessing(): """ Remove all handlers and add QueueHandler on top. This should only be called inside a multiprocessing worker process, since it changes the logger completely. """ # Multiprocess logging may be disabled. if not queue: return # Remove all handlers and add the Queue handler as the only one. for handler in logger.handlers[:]: logger.removeHandler(handler) queue_handler = QueueHandler(queue) queue_handler.setLevel(logging.DEBUG) logger.addHandler(queue_handler) # Change current thread name for log record threading.current_thread().name = multiprocessing.current_process().name