nlcpy.logging._vp_logging のソースコード

import logging
import sys
import atexit

VEO = 'nlcpy.veo'
MEMPOOL = 'nlcpy.mempool'
REQUEST = 'nlcpy.request'
NPWRAP = 'nlcpy.numpy_wrap'
FFT = 'nlcpy.fft'

_exitmode = False


def _get_logger(name):
    _logger = logging.getLogger(name)
    _logger.propagate = False
    _logger.addHandler(logging.NullHandler())
    return _logger


_loggers = {
    VEO: [_get_logger(VEO), False],
    MEMPOOL: [_get_logger(MEMPOOL), False],
    REQUEST: [_get_logger(REQUEST), False],
    NPWRAP: [_get_logger(NPWRAP), False],
    FFT: [_get_logger(FFT), False],
}


def get_logger(logger_name):
    """ Gets the logger.

    Parameters
    ----------
    logger_name : str
        Logger name

    Returns
    -------
    logger : logger
        Logger that corresponds to the logger name.

    """

    global _loggers
    return _loggers[logger_name][0]


def _is_enable(logger_name):
    global _loggers
    return _loggers[logger_name][1]


def _set_flag(logger_name, flag):
    global _loggers
    _loggers[logger_name][1] = flag


[ドキュメント]def set_stream_handler(logger_name, stream=sys.stderr, level=logging.INFO, format=None): """ Sets StreamHandler to the specified logger. Parameters ---------- logger_name : str Logger name stream : stream Stream to be logged. level : level Logging level. format : format Logging format. Returns ------- logger : logger Logger that corresponds to the logger name. """ _logger = get_logger(logger_name) if format is None: format = logging.BASIC_FORMAT _logger.setLevel(level) handler = logging.StreamHandler(stream) handler.setLevel(level) formatter = logging.Formatter(format) handler.setFormatter(formatter) _logger.addHandler(handler) _set_flag(logger_name, True) return _logger
[ドキュメント]def set_file_handler(logger_name, filename, mode='a', encoding=None, delay=False, level=logging.INFO, format=None): """ Sets FileHandler to the specified logger. Parameters ---------- logger_name : str Logger name filename : str File name to be logged. mode : mode File access mode. encoding : encoding Encoding. delay : bool Delay mode. level : level Logging level. format : format Logging format. Returns ------- logger : logger Logger that corresponds to the logger name. """ _logger = get_logger(logger_name) if format is None: format = logging.BASIC_FORMAT _logger.setLevel(level) handler = logging.FileHandler(filename, mode=mode, encoding=encoding, delay=delay) handler.setLevel(level) formatter = logging.Formatter(format) handler.setFormatter(formatter) _logger.addHandler(handler) _set_flag(logger_name, True) return _logger
[ドキュメント]def reset_handler(logger_name, level=logging.WARN): """ Resets the logger. Parameters ---------- logger_name : str Logger name level : level Logging level. Returns ------- logger : logger Logger that corresponds to the logger name. """ _logger = get_logger(logger_name) _logger.handlers.clear() _logger.addHandler(logging.NullHandler()) _set_flag(logger_name, False) return _logger
# TODO: show caller code and lineno of user code. def debug(logger_name, msg, *args, **kwargs): if not _exitmode: get_logger(logger_name).debug(msg, *args, **kwargs) def info(logger_name, msg, *args, **kwargs): if not _exitmode: get_logger(logger_name).info(msg, *args, **kwargs) @atexit.register def _logging_finalize(): # Do not log into FileHandler during Python finalization. # See https://bugs.python.org/issue26789. global _exitmode _exitmode = True