fix: logger setup mupltiple times

This commit is contained in:
debugtalk
2019-10-25 19:43:26 +08:00
parent 486f7f9061
commit a25f2eddf3

View File

@@ -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