Set the log code:
#log_setup.py
import logging
def setup_log(name=__name__,filename=None):
logger = logging.getLogger(name)
logger.setLevel(level=logging.INFO)
formatter = logging.Formatter(fmt='%(asctime)s-%(module)s-%(lineno)d-%(message)s', datefmt='%Y/%m/%d %H:%M:%S')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
#if not logger.hasHandlers():
# logger.addHandler(stream_handler)
if filename:
file_handler = logging.FileHandler(filename)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
Call log codes:
#module1.py
from log_setup import setup_log
logger = setup_log()
info_logger = setup_log( filename='log/info_logger.log')
Find the console log is printed twice, view the data and looked at the code:
We discovered the following reasons, I called twice setup_log function, but no incoming parameter name, resulting in generation logger and info_logger is an example, They address the same, so it is equivalent to adding two stream_handler, resulting in a call logger output console output twice the log.
Solution:
Log_setup incoming call is a different name on the line, and then setup_log function or method to do something with hasHandlers judgment.
logger = setup_log(__name__)
info_logger = setup_log(name='info', filename='log/info_logger.log')