def setup_logging(is_quiet: bool = False,
is_debug: bool = False,
verbosity: int = 6,
log_file: str = 'openadms.log') -> None:
"""Setups the logger and logging handlers.
Args:
is_quiet: Disable output.
is_debug: Print debug messages.
verbosity: Verbosity level (1 - 9).
log_file: Path of the log file.
"""
# Enable verbose logging.
verboselogs.install()
# Basic logging configuration.
console_level = logging.DEBUG if is_debug else logging.INFO
root.setLevel(console_level)
fmt = '%(asctime)s - %(levelname)8s - %(name)26s - %(message)s'
date_fmt = '%Y-%m-%dT%H:%M:%S'
formatter = logging.Formatter(fmt, date_fmt)
# File handler.
file_level = {
1: logging.CRITICAL,
2: logging.ERROR,
3: verboselogs.SUCCESS,
4: logging.WARNING,
5: verboselogs.NOTICE,
6: logging.INFO,
7: verboselogs.VERBOSE,
8: logging.DEBUG,
9: verboselogs.SPAM
}.get(verbosity, 6)
fh = logging.handlers.RotatingFileHandler(log_file,
maxBytes=LOG_FILE_MAX_SIZE,
backupCount=LOG_FILE_BACKUP_COUNT,
encoding='utf8')
fh.setLevel(file_level)
fh.setFormatter(formatter)
root.addHandler(fh)
if is_quiet:
# Silence logger output.
console_level = 100
# Colorized output of log messages.
coloredlogs.install(level=console_level,
fmt=fmt,
datefmt=date_fmt,
logger=root)
# Add filter to log handlers, to exclude log messages from HBMQTT.
for handler in logging.root.handlers:
handler.addFilter(RootFilter())
评论列表
文章目录