Source code for luna.common.custom_logger

import os, logging
from logging.handlers import RotatingFileHandler
from log4mongo.handlers import MongoHandler

from luna.common.config import ConfigSet

[docs]class MultilineFormatter(logging.Formatter):
[docs] def format(self, record: logging.LogRecord): save_msg = str(record.msg) output = "" for line in save_msg.splitlines(): record.msg = line output += super().format(record) + "\n" output = output.rstrip() record.msg = save_msg record.message = output return output
[docs]def init_logger(filename='data-processing.log'): # Logging configuration if os.environ['LUNA_HOME']: cfg = ConfigSet(name='LOG_CFG', config_file=os.path.join(os.environ['LUNA_HOME'], 'conf', 'logging.cfg')) else: raise RuntimeError("$LUNA_HOME is not set. Make sure you have set $LUNA_HOME and $LUNA_HOME/conf/logging.cfg") log_file = filename logger = logging.getLogger() logger.setLevel(cfg.get_value('LOG_CFG::LOG_LEVEL')) formatter = MultilineFormatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s') if not logger.handlers: # create console handler with a customizable, higher log level ch = logging.StreamHandler() ch.setLevel(cfg.get_value('LOG_CFG::LOG_LEVEL')) ch.setFormatter(formatter) logger.addHandler(ch) # create file handler which logs even debug messages fh = RotatingFileHandler(log_file, maxBytes=1e7, backupCount=10) fh.setLevel(cfg.get_value('LOG_CFG::LOG_LEVEL')) fh.setFormatter(formatter) logger.addHandler(fh) # create mongo log handler if we configured it if cfg and cfg.get_value('LOG_CFG::CENTRAL_LOGGING'): mh = MongoHandler ( host=cfg.get_value('LOG_CFG::MONGO_HOST'), port=cfg.get_value('LOG_CFG::MONGO_PORT'), capped=True ) mh.setLevel(cfg.get_value('LOG_CFG::MONGO_LOG_LEVEL')) logger.addHandler(mh) logger.info("FYI: Initalized logger, log file at: " + log_file + " with handlers: " + str(logger.handlers)) return logger