Example #1
0
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
Example #2
0
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
Example #3
0
 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'))
Example #4
0
 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')
     )
Example #5
0
File: base.py Project: zwm152/uhd
 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
Example #6
0
File: base.py Project: dkozel/uhd
 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