def install_filter(self, *args): rate_limit.install_filter(*args) logger = logging.getLogger() # remove handlers to not pollute stdout def restore_handlers(logger, handlers): for handler in handlers: logger.addHandler(handler) self.addCleanup(restore_handlers, logger, list(logger.handlers)) for handler in list(logger.handlers): logger.removeHandler(handler) # install our handler writing logs into a StringIO stream = six.StringIO() handler = logging.StreamHandler(stream) logger.addHandler(handler) return (logger, stream)
def install_filter(self, *args): rate_limit.install_filter(*args) logger = logging.getLogger() # remove handlers to not pollute stdout def restore_handlers(logger, handlers): for handler in handlers: logger.addHandler(handler) self.addCleanup(restore_handlers, logger, list(logger.handlers)) for handler in list(logger.handlers): logger.removeHandler(handler) # install our handler writing logs into a StringIO stream = io.StringIO() handler = logging.StreamHandler(stream) logger.addHandler(handler) return (logger, stream)
def _setup_logging_from_conf(conf, project, version): log_root = getLogger(None).logger # Remove all handlers for handler in list(log_root.handlers): log_root.removeHandler(handler) logpath = _get_log_file_path(conf) if logpath: # On Windows, in-use files cannot be moved or deleted. if conf.watch_log_file and platform.system() == 'Linux': from oslo_log import watchers file_handler = watchers.FastWatchedFileHandler filelog = file_handler(logpath) elif conf.log_rotation_type.lower() == "interval": file_handler = logging.handlers.TimedRotatingFileHandler when = conf.log_rotate_interval_type.lower() interval_type = LOG_ROTATE_INTERVAL_MAPPING[when] # When weekday is configured, "when" has to be a value between # 'w0'-'w6' (w0 for Monday, w1 for Tuesday, and so on)' if interval_type == 'w': interval_type = interval_type + str(conf.log_rotate_interval) filelog = file_handler(logpath, when=interval_type, interval=conf.log_rotate_interval, backupCount=conf.max_logfile_count) elif conf.log_rotation_type.lower() == "size": file_handler = logging.handlers.RotatingFileHandler maxBytes = conf.max_logfile_size_mb * units.Mi filelog = file_handler(logpath, maxBytes=maxBytes, backupCount=conf.max_logfile_count) else: file_handler = logging.handlers.WatchedFileHandler filelog = file_handler(logpath) log_root.addHandler(filelog) if conf.use_stderr: streamlog = handlers.ColorHandler() log_root.addHandler(streamlog) if conf.use_journal: journal = handlers.OSJournalHandler() log_root.addHandler(journal) if conf.use_eventlog: if platform.system() == 'Windows': eventlog = logging.handlers.NTEventLogHandler(project) log_root.addHandler(eventlog) else: raise RuntimeError(_("Windows Event Log is not available on this " "platform.")) # if None of the above are True, then fall back to standard out if not logpath and not conf.use_stderr and not conf.use_journal: # pass sys.stdout as a positional argument # python2.6 calls the argument strm, in 2.7 it's stream streamlog = handlers.ColorHandler(sys.stdout) log_root.addHandler(streamlog) if conf.publish_errors: handler = importutils.import_object( "oslo_messaging.notify.log_handler.PublishErrorsHandler", logging.ERROR) log_root.addHandler(handler) if conf.use_syslog: global syslog if syslog is None: raise RuntimeError("syslog is not available on this platform") facility = _find_facility(conf.syslog_log_facility) syslog_handler = handlers.OSSysLogHandler(facility=facility) log_root.addHandler(syslog_handler) datefmt = conf.log_date_format if not conf.use_json: for handler in log_root.handlers: handler.setFormatter(formatters.ContextFormatter(project=project, version=version, datefmt=datefmt, config=conf)) else: for handler in log_root.handlers: handler.setFormatter(formatters.JSONFormatter(datefmt=datefmt)) _refresh_root_level(conf.debug) for pair in conf.default_log_levels: mod, _sep, level_name = pair.partition('=') logger = logging.getLogger(mod) numeric_level = None try: # NOTE(harlowja): integer's are valid level names, and for some # libraries they have a lower level than DEBUG that is typically # defined at level 5, so to make that accessible, try to convert # this to a integer, and if not keep the original... numeric_level = int(level_name) except ValueError: # nosec pass if numeric_level is not None: logger.setLevel(numeric_level) else: logger.setLevel(level_name) if conf.rate_limit_burst >= 1 and conf.rate_limit_interval >= 1: from oslo_log import rate_limit rate_limit.install_filter(conf.rate_limit_burst, conf.rate_limit_interval, conf.rate_limit_except)
def _setup_logging_from_conf(conf, project, version): log_root = getLogger(None).logger # Remove all handlers for handler in list(log_root.handlers): log_root.removeHandler(handler) logpath = _get_log_file_path(conf) if logpath: if conf.watch_log_file and platform.system() == 'Linux': from oslo_log import watchers file_handler = watchers.FastWatchedFileHandler else: file_handler = logging.handlers.WatchedFileHandler filelog = file_handler(logpath) log_root.addHandler(filelog) if conf.use_stderr: streamlog = handlers.ColorHandler() log_root.addHandler(streamlog) if conf.use_journal: journal = handlers.OSJournalHandler() log_root.addHandler(journal) # if None of the above are True, then fall back to standard out if not logpath and not conf.use_stderr and not conf.use_journal: # pass sys.stdout as a positional argument # python2.6 calls the argument strm, in 2.7 it's stream streamlog = handlers.ColorHandler(sys.stdout) log_root.addHandler(streamlog) if conf.publish_errors: handler = importutils.import_object( "oslo_messaging.notify.log_handler.PublishErrorsHandler", logging.ERROR) log_root.addHandler(handler) if conf.use_syslog: global syslog if syslog is None: raise RuntimeError("syslog is not available on this platform") facility = _find_facility(conf.syslog_log_facility) syslog_handler = handlers.OSSysLogHandler(facility=facility) log_root.addHandler(syslog_handler) datefmt = conf.log_date_format for handler in log_root.handlers: handler.setFormatter( formatters.ContextFormatter(project=project, version=version, datefmt=datefmt, config=conf)) _refresh_root_level(conf.debug) for pair in conf.default_log_levels: mod, _sep, level_name = pair.partition('=') logger = logging.getLogger(mod) numeric_level = None try: # NOTE(harlowja): integer's are valid level names, and for some # libraries they have a lower level than DEBUG that is typically # defined at level 5, so to make that accessible, try to convert # this to a integer, and if not keep the original... numeric_level = int(level_name) except ValueError: # nosec pass if numeric_level is not None: logger.setLevel(numeric_level) else: logger.setLevel(level_name) if conf.rate_limit_burst >= 1 and conf.rate_limit_interval >= 1: from oslo_log import rate_limit rate_limit.install_filter(conf.rate_limit_burst, conf.rate_limit_interval, conf.rate_limit_except)
def test_install_twice(self): rate_limit.install_filter(100, 1) self.assertRaises(RuntimeError, rate_limit.install_filter, 100, 1)
def test_install_twice(self): rate_limit.install_filter(100, 1) self.assertRaises(RuntimeError, rate_limit.install_filter, 100, 1)