2014-08-27 82 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') 
相关问题