Source code for luna.common.custom_logger

import os
import 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("Initalized logger, log file at: " + log_file) logger.debug("Initalized logger with handlers: " + str(logger.handlers)) return logger