From a25f2eddf3257b3627526787517792a43fbd3c05 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Fri, 25 Oct 2019 19:43:26 +0800 Subject: [PATCH] fix: logger setup mupltiple times --- httprunner/logger.py | 46 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/httprunner/logger.py b/httprunner/logger.py index 62cb56c6..2887f309 100644 --- a/httprunner/logger.py +++ b/httprunner/logger.py @@ -1,5 +1,3 @@ -# encoding: utf-8 - import logging import sys @@ -8,6 +6,9 @@ from colorlog import ColoredFormatter init(autoreset=True) +LOG_LEVEL = "INFO" +LOG_FILE_PATH = None + log_colors_config = { 'DEBUG': 'cyan', 'INFO': 'green', @@ -15,11 +16,27 @@ log_colors_config = { 'ERROR': 'red', 'CRITICAL': 'red', } -logger = logging.getLogger("httprunner") +loggers = {} def setup_logger(log_level, log_file=None): + global LOG_LEVEL + LOG_LEVEL = log_level + + if log_file: + global LOG_FILE_PATH + LOG_FILE_PATH = log_file + + +def get_logger(name=None): """setup logger with ColoredFormatter.""" + name = name or "httprunner" + if name in loggers: + return loggers[name] + + _logger = logging.getLogger(name) + + log_level = LOG_LEVEL level = getattr(logging, log_level.upper(), None) if not level: color_print("Invalid log level: %s" % log_level, "RED") @@ -29,21 +46,24 @@ def setup_logger(log_level, log_file=None): if level >= logging.INFO: sys.tracebacklimit = 0 + _logger.setLevel(level) + + if LOG_FILE_PATH: + handler = logging.FileHandler(LOG_FILE_PATH, encoding="utf-8") + else: + handler = logging.StreamHandler(sys.stdout) + formatter = ColoredFormatter( u"%(log_color)s%(bg_white)s%(levelname)-8s%(reset)s %(message)s", datefmt=None, reset=True, log_colors=log_colors_config ) - - if log_file: - handler = logging.FileHandler(log_file, encoding="utf-8") - else: - handler = logging.StreamHandler() - handler.setFormatter(formatter) - logger.addHandler(handler) - logger.setLevel(level) + _logger.addHandler(handler) + + loggers[name] = _logger + return _logger def coloring(text, color="WHITE"): @@ -59,9 +79,11 @@ def color_print(msg, color="WHITE"): def log_with_color(level): """ log with color by different level """ + _logger = get_logger() + def wrapper(text): color = log_colors_config[level.upper()] - getattr(logger, level.lower())(coloring(text, color)) + getattr(_logger, level.lower())(coloring(text, color)) return wrapper