示例#1
0
def std_setting(logger: logging.Logger,
                level=logging.DEBUG,
                *,
                format_str: str = None,
                log_file: str = None,
                when_separate='midnight'):
    # 清空handler, 以免重复输出
    if logger.hasHandlers():
        for hdlr in logger.handlers.copy():
            logger.removeHandler(hdlr)

    # set formatter
    if not format_str:
        format_str = default_format
    formatter = Formatter(format_str)

    # set stream handler
    stream_handler = StreamHandler(sys.stderr)
    stream_handler.setFormatter(formatter)
    stream_handler.setLevel(level)
    logger.addHandler(stream_handler)

    # set file handler
    if log_file:
        file_handler = TimedRotatingFileHandler(os.path.join(
            log_dir, log_file),
                                                when=when_separate,
                                                encoding='utf-8')
        file_handler.setFormatter(formatter)
        file_handler.setLevel(level)
        logger.addHandler(file_handler)

    logger.setLevel(level)
示例#2
0
def create_mpi_logger(logger: logging.Logger, rank: int) -> logging.Logger:
    """
    Creates a very similar logger to the input logger, but with name and
    filehandler dependent on mpi rank.

    :param logger: The original logger to crete a rank-dependent version on.
    :type logger: logging.Logger
    :return: The rank dependent logger (different name and different file)
    :rtype: logging.Logger
    """
    lvl = logger.level
    rankstr = str(rank).zfill(3)
    name = '%srank%s' % (logger.name, rankstr)
    while not logger.hasHandlers() or not (any(
            hasattr(h, 'baseFilename') for h in logger.handlers)):
        if logger.name == 'root':
            raise ValueError(
                'The logger used as input has to have a configured' +
                'FileHandler.')
        logger = logger.parent
    for h in logger.handlers:
        if hasattr(h, 'baseFilename'):
            fn = '%srank%s.log' % (h.baseFilename.split('.')[0], rankstr)
    try:
        return start_logger_if_necessary(name, fn, lvl)
    except UnboundLocalError as e:
        print(e)
        raise ValueError(
            'The logger used as input has to have a configured FileHandler.')
示例#3
0
def run_app(app: Union[Application, Awaitable[Application]],
            *,
            host: Optional[str] = None,
            port: Optional[int] = None,
            path: Optional[str] = None,
            sock: Optional[socket.socket] = None,
            shutdown_timeout: float = 60.0,
            ssl_context: Optional[SSLContext] = None,
            print: Callable[..., None] = print,
            backlog: int = 128,
            access_log_class: Type[AbstractAccessLogger] = AccessLogger,
            access_log_format: str = AccessLogger.LOG_FORMAT,
            access_log: logging.Logger = access_logger,
            handle_signals: bool = True,
            reuse_address: Optional[bool] = None,
            reuse_port: Optional[bool] = None) -> None:
    """Run an app locally"""
    loop = asyncio.get_event_loop()

    # Configure if and only if in debugging mode and using the default logger
    if loop.get_debug() and access_log.name == 'aiohttp.access':
        if access_log.level == logging.NOTSET:
            access_log.setLevel(logging.DEBUG)
        if not access_log.hasHandlers():
            access_log.addHandler(logging.StreamHandler())

    try:
        loop.run_until_complete(
            _run_app(app,
                     host=host,
                     port=port,
                     path=path,
                     sock=sock,
                     shutdown_timeout=shutdown_timeout,
                     ssl_context=ssl_context,
                     print=print,
                     backlog=backlog,
                     access_log_class=access_log_class,
                     access_log_format=access_log_format,
                     access_log=access_log,
                     handle_signals=handle_signals,
                     reuse_address=reuse_address,
                     reuse_port=reuse_port))
    except (GracefulExit, KeyboardInterrupt):  # pragma: no cover
        pass
    finally:
        _cancel_all_tasks(loop)
        if sys.version_info >= (3, 6):  # don't use PY_36 to pass mypy
            loop.run_until_complete(loop.shutdown_asyncgens())
        loop.close()
示例#4
0
文件: web.py 项目: wwqgtxx/wwqLyParse
def run_app(app: Union[Application, Awaitable[Application]], *,
            host: Optional[str]=None,
            port: Optional[int]=None,
            path: Optional[str]=None,
            sock: Optional[socket.socket]=None,
            shutdown_timeout: float=60.0,
            ssl_context: Optional[SSLContext]=None,
            print: Callable[..., None]=print,
            backlog: int=128,
            access_log_class: Type[AbstractAccessLogger]=AccessLogger,
            access_log_format: str=AccessLogger.LOG_FORMAT,
            access_log: logging.Logger=access_logger,
            handle_signals: bool=True,
            reuse_address: Optional[bool]=None,
            reuse_port: Optional[bool]=None) -> None:
    """Run an app locally"""
    loop = asyncio.get_event_loop()

    # Configure if and only if in debugging mode and using the default logger
    if loop.get_debug() and access_log.name == 'aiohttp.access':
        if access_log.level == logging.NOTSET:
            access_log.setLevel(logging.DEBUG)
        if not access_log.hasHandlers():
            access_log.addHandler(logging.StreamHandler())

    try:
        loop.run_until_complete(_run_app(app,
                                         host=host,
                                         port=port,
                                         path=path,
                                         sock=sock,
                                         shutdown_timeout=shutdown_timeout,
                                         ssl_context=ssl_context,
                                         print=print,
                                         backlog=backlog,
                                         access_log_class=access_log_class,
                                         access_log_format=access_log_format,
                                         access_log=access_log,
                                         handle_signals=handle_signals,
                                         reuse_address=reuse_address,
                                         reuse_port=reuse_port))
    except (GracefulExit, KeyboardInterrupt):  # pragma: no cover
        pass
    finally:
        _cancel_all_tasks(loop)
        if sys.version_info >= (3, 6):  # don't use PY_36 to pass mypy
            loop.run_until_complete(loop.shutdown_asyncgens())
        loop.close()
示例#5
0
 def _restrict_output(self, logger: logging.Logger, level: int) -> None:
     # we assume the first handler is always our STDIO handler
     if logger.hasHandlers():
         logger.handlers[0].setLevel(level)