2017-10-13 32 views
-4

我想要正確的輸出。爲什麼我的日誌輸出三行?

爲什麼我的日誌輸出三行?

我的代碼是:

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 
+1

什麼是正確的輸出? – quamrana

+0

您的代碼在每次調用時都會記錄日誌,而不是寫入日誌。 – Vinny

+0

正確的結果是兩行不是三行@ quamrana –

回答

1

的問題是,每次調用log_info時候,你在呼喚addHandler。因此,第一次調用它時,添加第一個處理程序,並且文本被記錄一次。第二次,你添加第二個處理程序,所以現在一切都記錄了兩次。

將函數分成(a)初始化處理函數的函數和(b)記錄新消息的函數。打電話給(a)一次,只有一次。之後,每當你想要記錄一條新消息(全部應該叫做my_logger.info),就打電話給(b)。

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)