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)
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.')
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()
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()
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)