nubia/internal/io/logger.py (34 lines of code) (raw):

#!/usr/bin/env python3 # Copyright (c) Facebook, Inc. and its affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. # import logging import threading from termcolor import colored class ContextFilter(logging.Filter): def filter(self, record): # colorize the level level = record.levelname.lower().rjust(7) if record.levelno <= logging.DEBUG: level = colored(level, "blue") elif record.levelno >= logging.ERROR: level = colored(level, "red") elif record.levelno >= logging.WARNING: level = colored(level, "yellow") record.level = level # logger name if record.name == "__main__": logger_name = "main" else: logger_name = record.name.split(".")[-1] record.logger_name = logger_name # thread name (optional) record.thread = "" if record.levelno <= logging.DEBUG: thread = threading.current_thread().getName() if thread != "MainThread": record.thread = "thread {}: ".format(thread) return True def get_formatter(): return logging.Formatter( fmt="[%(asctime)-15s] [%(level)6s] [%(logger_name)s] %(thread)s%(message)s" ) def setup_logger(level, stream): log_handler = logging.StreamHandler(stream) log_handler.setFormatter(get_formatter()) log_handler.addFilter(ContextFilter()) logging.root.addHandler(log_handler) logging.root.setLevel(level)