我想要正确的输出。
为什么我的日志输出三行?
我的代码是:
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
答案 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)