Вход в Python и ротация файлов - PullRequest
27 голосов
/ 02 февраля 2012

У меня есть программа на python, которая пишет в файл журнала, который вращается командой logrotate в Linux.Когда это происходит, мне нужно дать сигнал моей программе прекратить запись в старый файл и начать запись в новый.Я могу обработать сигнал, но как мне сказать python записать в новый файл?

Я открываю файл так:

logging.basicConfig(format='%(asctime)s:%(filename)s:%(levelname)s:%(message)s',filename=log_file, level=logging.INFO)

и пишу в него так:

logging.log(level,"%s" % (msg))

Модули каротажа выглядят очень мощными, но при этом потрясающими.Спасибо.

Ответы [ 4 ]

20 голосов
/ 02 февраля 2012

Возможно, вы захотите взглянуть на WatchedFileHandler , чтобы реализовать это или, в качестве альтернативы, реализовать ротацию журналов с помощью RotatingFileHandler , оба из которых находятся в модуле logging.handlers..

19 голосов
/ 05 февраля 2015

Не используйте 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!')
7 голосов
/ 24 декабря 2013

Поскольку поворот уже выполняется logrotate, в вашем обработчике сигналов вам нужно просто снова вызвать logging.basicConfig(...), и это снова откроет файл журнала.

6 голосов
/ 02 февраля 2012
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

Это должно помочь вам в обращении с вращающимся бревном

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...