def get_main_logger(use_console=True, use_journal=False, use_logbuf=True, console_color=True, log_default_delta=0): """ Returns the top-level logger object. This is the only API call from this file that should be used outside. """ global LOGGER if LOGGER is not None: return LOGGER logging.addLevelName(TRACE, 'TRACE') logging.setLoggerClass(MPMLogger) LOGGER = logging.getLogger('MPM') if use_console: console_handler = ColorStreamHandler( ) if console_color else logging.StreamHandler() console_formatter = logging.Formatter( "[%(name)s] [%(levelname)s] %(message)s") console_handler.setFormatter(console_formatter) LOGGER.addHandler(console_handler) if use_journal: from systemd.journal import JournalHandler journal_handler = JournalHandler(SYSLOG_IDENTIFIER='usrp_hwd') journal_formatter = logging.Formatter( '[%(levelname)s] [%(module)s] %(message)s') journal_handler.setFormatter(journal_formatter) LOGGER.addHandler(journal_handler) if use_logbuf: queue_handler = LossyQueueHandler(LOGGER.py_log_buf) LOGGER.addHandler(queue_handler) # Set default level: from usrp_mpm import prefs mpm_prefs = prefs.get_prefs() default_log_level = int( min(mpm_prefs.get_log_level() - log_default_delta * 10, CRITICAL)) default_log_level = max(TRACE, default_log_level - (default_log_level % 10)) LOGGER.setLevel(default_log_level) # Connect to C++ logging: if LOGGER.cpp_log_buf is not None: lib_logger = LOGGER.getChild('lib') def log_from_cpp(): " Callback for logging from C++ " log_level, component, message = LOGGER.cpp_log_buf.pop() if log_level: lib_logger.log(log_level, "[%s] %s", component, message.strip()) LOGGER.cpp_log_buf.set_notify_callback(log_from_cpp) # Flush errors stuck in the prefs module: log = LOGGER.getChild('prefs') for err_msg in mpm_prefs.get_log_errors(): log.error(err_msg) return LOGGER
def get_main_logger( use_console=True, use_journal=False, use_logbuf=True, console_color=True, log_default_delta=0 ): """ Returns the top-level logger object. This is the only API call from this file that should be used outside. """ global LOGGER if LOGGER is not None: return LOGGER logging.addLevelName(TRACE, 'TRACE') logging.setLoggerClass(MPMLogger) LOGGER = logging.getLogger('MPM') if use_console: console_handler = ColorStreamHandler() if console_color else logging.StreamHandler() console_formatter = logging.Formatter("[%(name)s] [%(levelname)s] %(message)s") console_handler.setFormatter(console_formatter) LOGGER.addHandler(console_handler) if use_journal: from systemd.journal import JournalHandler journal_handler = JournalHandler(SYSLOG_IDENTIFIER='usrp_hwd') journal_formatter = logging.Formatter('[%(levelname)s] [%(module)s] %(message)s') journal_handler.setFormatter(journal_formatter) LOGGER.addHandler(journal_handler) if use_logbuf: queue_handler = LossyQueueHandler(LOGGER.py_log_buf) LOGGER.addHandler(queue_handler) # Set default level: from usrp_mpm import prefs mpm_prefs = prefs.get_prefs() default_log_level = int(min( mpm_prefs.get_log_level() - log_default_delta * 10, CRITICAL )) default_log_level = max(TRACE, default_log_level - (default_log_level % 10)) LOGGER.setLevel(default_log_level) # Connect to C++ logging: if LOGGER.cpp_log_buf is not None: lib_logger = LOGGER.getChild('lib') def log_from_cpp(): " Callback for logging from C++ " log_level, component, message = LOGGER.cpp_log_buf.pop() if log_level: lib_logger.log(log_level, "[%s] %s", component, message.strip()) LOGGER.cpp_log_buf.set_notify_callback(log_from_cpp) # Flush errors stuck in the prefs module: log = LOGGER.getChild('prefs') for err_key, err_msg in mpm_prefs.get_log_errors(): log.error('%s: %s', err_key, err_msg) return LOGGER
def __init__(self, *args, **kwargs): logging.Logger.__init__(self, *args, **kwargs) self.cpp_log_buf = None try: import usrp_mpm.libpyusrp_periphs as lib self.cpp_log_buf = lib.types.log_buf.make_singleton() except ImportError: pass from usrp_mpm import prefs self.py_log_buf = collections.deque( maxlen=prefs.get_prefs().getint('mpm', 'log_buf_size'))
def __init__(self, *args, **kwargs): logging.Logger.__init__(self, *args, **kwargs) self.cpp_log_buf = None try: import usrp_mpm.libpyusrp_periphs as lib self.cpp_log_buf = lib.types.log_buf.make_singleton() except ImportError: pass from usrp_mpm import prefs self.py_log_buf = collections.deque( maxlen=prefs.get_prefs().getint('mpm', 'log_buf_size') )
def _update_default_args(self, default_args): """ Pipe the default_args (that get passed into us from the RPC server) through the prefs API. This way, we respect both the config file and command line arguments. """ prefs_cache = prefs.get_prefs() periph_section_name = None if prefs_cache.has_section(self.device_info.get('product')): periph_section_name = self.device_info.get('product') elif prefs_cache.has_section(self.device_info.get('type')): periph_section_name = self.device_info.get('type') if periph_section_name is not None: prefs_cache.read_dict({periph_section_name: default_args}) return dict(prefs_cache[periph_section_name]) # else: return default_args
def _update_default_args(self, default_args): """ Pipe the default_args (that get passed into us from the RPC server) through the prefs API. This way, we respect both the config file and command line arguments. """ prefs_cache = prefs.get_prefs() periph_section_name = None if prefs_cache.has_section(self.device_info.get('product')): periph_section_name = self.device_info.get('product') elif prefs_cache.has_section(self.device_info.get('type')): periph_section_name = self.device_info.get('type') if periph_section_name is not None: prefs_cache.read_dict({periph_section_name: default_args}) return dict(prefs_cache[periph_section_name]) else: return default_args