为什么我的日志输出三行?

时间:2017-10-13 09:52:50

标签: python

我想要正确的输出。

为什么我的日志输出三行?

我的代码是:

import logging
import logging.handlers
#LOG
import time

def log_info(log):
    LOG_FILENAME='log'
    # Set up a specific logger with our desired output level
    my_logger = logging.getLogger('log')
    my_logger.setLevel(logging.INFO)
    # Add the log message handler to the logger
    handler = logging.handlers.RotatingFileHandler(LOG_FILENAME,
                maxBytes=1048576,
                backupCount=5,
               )
    my_logger.addHandler(handler)
    # Log some messages
    my_logger.info(log)

def test(log):
    log_info(log=log)

for i in range(2):
    print i
    a = "1111111111111"
    b = test(a)

我的结果:

1111111111111
1111111111111
1111111111111

我在期待这个:

1111111111111
1111111111111

2 个答案:

答案 0 :(得分:1)

问题在于,每次拨打log_info时,您都在呼叫addHandler。所以第一次调用它时,你会添加第一个处理程序,并且文本会被记录一次。第二次,你添加第二个处理程序,所以现在一切都记录了两次。

将函数拆分为(a)初始化处理程序的函数,以及(b)记录新消息的函数。拨打(a)一次,只拨打一次。之后,每次要记录新消息时调用(b)(它应该做的就是调用my_logger.info)。

答案 1 :(得分:0)

所以,@ TomKarzes指示你编写这样的代码:

import logging
import logging.handlers

def initialise_log():
    LOG_FILENAME = 'log'
    # Set up a specific logger with our desired output level
    my_logger = logging.getLogger('log')
    my_logger.setLevel(logging.INFO)
    # Add the log message handler to the logger
    handler = logging.handlers.RotatingFileHandler(LOG_FILENAME,
                maxBytes=1048576,
                backupCount=5,
               )
    my_logger.addHandler(handler)
    return my_logger

def test(log):
    # Log some messages
    my_logger.info(log)

my_logger = initialise_log()

for i in range(2):
    print i
    a = "1111111111111"
    b = test(a)