2014-08-27 117 views
4

我需要重命名日誌文件,但之後繼續記錄。我正在運行Python 3.x並使用logging模塊創建日誌。使用日誌記錄模塊在python中重命名日誌文件

logger = logging.getLogger(r'mylogger') 
handler = logging.FileHandler(r'mylog.txt', mode = r'w') 
logger.addHandler(handler) 
logger.info(r'msg 1') 
logger.info(r'msg 2') 

handler.renameFile(r'my_newlog.txt') # <--- Is something like this possible? 

logger.info(r'msg 3') 

有沒有人知道這樣的事情是否可能?如果不是,我會怎麼做呢?我的一個想法是關閉文件(handler.close()),從記錄器中刪除處理程序,重命名舊文件,使用新文件名創建新處理程序並將其添加到記錄器。然而,問題是我需要創建一個完全相同的處理程序,即它需要具有與舊程序相同的屬性(當然文件名除外)。有沒有簡單的方法來存儲舊的屬性,然後使用它們來設置新處理程序的屬性?

任何幫助表示讚賞。

回答

0
import glob 
import logging 
import logging.handlers 

LOG_FILENAME = 'logging_rotatingfile_example.out' 

# Set up a specific logger with our desired output level 
my_logger = logging.getLogger('MyLogger') 
my_logger.setLevel(logging.DEBUG) 

# Add the log message handler to the logger 
handler = logging.handlers.RotatingFileHandler(
       LOG_FILENAME, maxBytes=20, backupCount=5) 

my_logger.addHandler(handler) 

# Log some messages 
for i in range(20): 
    my_logger.debug('i = %d' % i) 

# See what files are created 
logfiles = glob.glob('%s*' % LOG_FILENAME) 

for filename in logfiles: 
    print(filename) 

結果應該是6頁獨立的文件,每個應用程序的日誌歷史記錄的一部分:

logging_rotatingfile_example.out 
logging_rotatingfile_example.out.1 
logging_rotatingfile_example.out.2 
logging_rotatingfile_example.out.3 
logging_rotatingfile_example.out.4 
logging_rotatingfile_example.out.5 
0

晚的聚會,但我遇到了這個問題,以及在這裏就是我的」 ve(暫時)解決了它。需要更多的測試。

請注意,在我的情況下,我確實可以訪問前面的處理程序,所以我只是使用之前使用的相同處理程序配置進行清理。我同意一個FileHandler.'rename_file()'方法會很好。可以通過對FileHandler()進行分類來製作一個,但這是另一天的練習。

#!/usr/bin/env python3 

import os 
import logging 

logger_name1 = 'my_log.txt' 
logger_name2 = 'my_new_log.txt' 

logger = logging.getLogger('mylogger') 
logger.level = logging.INFO 
handler = logging.FileHandler(logger_name1, mode='w') 
logger.addHandler(handler) 
logger.info('msg 1') 
logger.info('msg 2') 

# handler.renameFile('my_newlog.txt') # <--- Is something like this possible? 

logger.removeHandler(handler) 

# Rename the logfile on disk 
os.rename(logger_name1, logger_name2) 

# New handler using new filename. Note the 'append' flag 
new_handler = logging.FileHandler(logger_name2, mode='a') 
logger.addHandler(new_handler) 

# Try out the new logfile 
logger.info('msg 3') 
相關問題