|
import logging |
|
import tqdm |
|
|
|
class LoggingHandler(logging.Handler): |
|
def __init__(self, level=logging.NOTSET): |
|
super().__init__(level) |
|
|
|
def emit(self, record): |
|
try: |
|
msg = self.format(record) |
|
tqdm.tqdm.write(msg) |
|
self.flush() |
|
except (KeyboardInterrupt, SystemExit): |
|
raise |
|
except: |
|
self.handleError(record) |
|
|
|
|
|
def install_logger( |
|
given_logger, level = logging.WARNING, fmt="%(levelname)s:%(name)s:%(message)s" |
|
): |
|
""" Configures the given logger; format, logging level, style, etc """ |
|
import coloredlogs |
|
|
|
def add_notice_log_level(): |
|
""" Creates a new 'notice' logging level """ |
|
|
|
|
|
NOTICE_LEVEL_NUM = 25 |
|
logging.addLevelName(NOTICE_LEVEL_NUM, "NOTICE") |
|
|
|
def notice(self, message, *args, **kws): |
|
if self.isEnabledFor(NOTICE_LEVEL_NUM): |
|
self._log(NOTICE_LEVEL_NUM, message, args, **kws) |
|
|
|
logging.Logger.notice = notice |
|
|
|
|
|
add_notice_log_level() |
|
|
|
|
|
|
|
field_styles = coloredlogs.DEFAULT_FIELD_STYLES.copy() |
|
field_styles["asctime"] = {} |
|
level_styles = coloredlogs.DEFAULT_LEVEL_STYLES.copy() |
|
level_styles["debug"] = {"color": "white", "faint": True} |
|
level_styles["notice"] = {"color": "cyan", "bold": True} |
|
|
|
coloredlogs.install( |
|
logger=given_logger, |
|
level=level, |
|
use_chroot=False, |
|
fmt=fmt, |
|
level_styles=level_styles, |
|
field_styles=field_styles, |
|
) |
|
|