Python repeatedly output log, the log printed twice

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')

 

 

Published 115 original articles · won praise 34 · views 90000 +

Guess you like

Origin blog.csdn.net/u011519550/article/details/103051656