2014-08-27 4 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

Late партии, но я столкнулся с этой проблемой, а также и вот как я 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') 
Смежные вопросы