Ответ 1
Вы можете захотеть взглянуть на WatchedFileHandler, чтобы реализовать это, или, в качестве альтернативы, реализовать поворот журнала с помощью RotatingFileHandler, оба из которых находятся в модуле logging.handlers.
У меня есть программа python, которая записывает в файл журнала, который вращается командой Linux logrotate. Когда это произойдет, мне нужно сообщить моей программе, чтобы она перестала записываться в старый файл и начала запись на новый. Я могу обрабатывать сигнал, но как я могу сказать python для записи в новый файл?
Я открываю файл следующим образом:
logging.basicConfig(format='%(asctime)s:%(filename)s:%(levelname)s:%(message)s',filename=log_file, level=logging.INFO)
и записывая его следующим образом:
logging.log(level,"%s" % (msg))
Модули регистрации выглядят очень мощными, но также подавляющими. Спасибо.
Вы можете захотеть взглянуть на WatchedFileHandler, чтобы реализовать это, или, в качестве альтернативы, реализовать поворот журнала с помощью RotatingFileHandler, оба из которых находятся в модуле logging.handlers.
Не используйте logging.basicConfig
, используйте WatchedFileHandler
. Здесь как его использовать.
import time
import logging
import logging.handlers
def log_setup():
log_handler = logging.handlers.WatchedFileHandler('my.log')
formatter = logging.Formatter(
'%(asctime)s program_name [%(process)d]: %(message)s',
'%b %d %H:%M:%S')
formatter.converter = time.gmtime # if you want UTC time
log_handler.setFormatter(formatter)
logger = logging.getLogger()
logger.addHandler(log_handler)
logger.setLevel(logging.DEBUG)
log_setup()
logging.info('Hello, World!')
import os
os.rename('my.log', 'my.log-old')
logging.info('Hello, New World!')
Поскольку поворот уже выполняется с помощью logrotate
, в вашем обработчике сигнала вы должны просто вызвать logging.basicConfig(...)
снова, и это должно снова открыть файл журнала.
from logging import handlers
handler = handlers.TimedRotatingFileHandler(filename, when=LOG_ROTATE)
handler.setFormatter(logging.Formatter(log_format, datefmt="%d-%m-%Y %H:%M:%S"))
#LOG_ROTATE = midnight
#set your log format
Это поможет вам справиться с вращающимся журналом