def create_logger(logger_name, filename=None, max_file_size=None, max_backups=None): """Creates and returns the named logger If the logger already exists, it will be destroyed and recreated with the current config in env.yaml """ # If the logger already exists, destroy it # TODO: remove the need to destroy the logger logging.root.manager.loggerDict.pop(logger_name, None) # Grab the logging conf conf = _load_conf(logger_name) log_path.ensure(dir=True) if filename: log_file = filename else: log_file = str(log_path.join('{}.log'.format(logger_name))) # log_file is dynamic, so we can't used logging.config.dictConfig here without creating # a custom RotatingFileHandler class. At some point, we should do that, and move the # entire logging config into env.yaml file_formatter = logging.Formatter(conf['file_format']) file_handler = RotatingFileHandler(log_file, maxBytes=max_file_size or conf['max_file_size'], backupCount=max_backups or conf['max_file_backups'], encoding='utf8') file_handler.setFormatter(file_formatter) logger = logging.getLogger(logger_name) logger.addHandler(file_handler) syslog_settings = _get_syslog_settings() if syslog_settings: lid = fauxfactory.gen_alphanumeric(8) fmt = '%(asctime)s [' + lid + '] %(message)s' syslog_formatter = SyslogMsecFormatter(fmt=fmt) syslog_handler = SysLogHandler(address=syslog_settings) syslog_handler.setFormatter(syslog_formatter) logger.addHandler(syslog_handler) logger.setLevel(conf['level']) if conf['errors_to_console']: stream_formatter = logging.Formatter(conf['stream_format']) stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.ERROR) stream_handler.setFormatter(stream_formatter) logger.addHandler(stream_handler) logger.addFilter(_RelpathFilter()) return logger
def create_logger(logger_name, filename=None, max_file_size=None, max_backups=None): """Creates and returns the named logger If the logger already exists, it will be destroyed and recreated with the current config in env.yaml """ # If the logger already exists, destroy it if logger_name in logging.root.manager.loggerDict: del (logging.root.manager.loggerDict[logger_name]) # Grab the logging conf conf = _load_conf(logger_name) log_path.ensure(dir=True) if filename: log_file = filename else: log_file = str(log_path.join("{}.log".format(logger_name))) # log_file is dynamic, so we can't used logging.config.dictConfig here without creating # a custom RotatingFileHandler class. At some point, we should do that, and move the # entire logging config into env.yaml file_formatter = logging.Formatter(conf["file_format"]) file_handler = RotatingFileHandler( log_file, maxBytes=max_file_size or conf["max_file_size"], backupCount=max_backups or conf["max_file_backups"], encoding="utf8", ) file_handler.setFormatter(file_formatter) logger = logging.getLogger(logger_name) logger.addHandler(file_handler) syslog_settings = _get_syslog_settings() if syslog_settings: lid = fauxfactory.gen_alphanumeric(8) fmt = "%(asctime)s [" + lid + "] %(message)s" syslog_formatter = SyslogMsecFormatter(fmt=fmt) syslog_handler = SysLogHandler(address=syslog_settings) syslog_handler.setFormatter(syslog_formatter) logger.addHandler(syslog_handler) logger.setLevel(conf["level"]) if conf["errors_to_console"]: stream_formatter = logging.Formatter(conf["stream_format"]) stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.ERROR) stream_handler.setFormatter(stream_formatter) logger.addHandler(stream_handler) logger.addFilter(_RelpathFilter()) return logger
def create_logger(logger_name, filename=None): """Creates and returns the named logger If the logger already exists, it will be destroyed and recreated with the current config in env.yaml """ # If the logger already exists, destroy it if logger_name in logging.root.manager.loggerDict: del(logging.root.manager.loggerDict[logger_name]) # Grab the logging conf conf = _load_conf(logger_name) log_path.ensure(dir=True) if filename: log_file = filename else: log_file = str(log_path.join('%s.log' % logger_name)) relpath_filter = _RelpathFilter() # log_file is dynamic, so we can't used logging.config.dictConfig here without creating # a custom RotatingFileHandler class. At some point, we should do that, and move the # entire logging config into env.yaml file_formatter = logging.Formatter(conf['file_format']) file_handler = RotatingFileHandler(log_file, maxBytes=conf['max_file_size'], backupCount=conf['max_file_backups'], encoding='utf8') file_handler.setFormatter(file_formatter) logger = logging.getLogger(logger_name) logger.addHandler(file_handler) syslog_settings = _get_syslog_settings() if syslog_settings: lid = generate_random_string(8) fmt = '%(asctime)s [' + lid + '] %(message)s' syslog_formatter = SyslogMsecFormatter(fmt=fmt) syslog_handler = SysLogHandler(address=syslog_settings) syslog_handler.setFormatter(syslog_formatter) logger.addHandler(syslog_handler) logger.setLevel(conf['level']) if conf['errors_to_console']: stream_formatter = logging.Formatter(conf['stream_format']) stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.ERROR) stream_handler.setFormatter(stream_formatter) logger.addHandler(stream_handler) logger.addFilter(relpath_filter) return logger