вход в непрерывный цикл - PullRequest
3 голосов
/ 28 июня 2011

Что может быть хорошим способом для создания журналов (с модулем журналирования Python) внутри цикла постоянной работы, без создания большого количества бесполезных лог-файлов? Примером может служить цикл, в котором константа перечисляет папку и выполняет некоторые действия, когда видит файл определенного типа. Я хочу записать, что файлы не были найдены или были найдены, но имеют неправильный тип, без постоянной записи одной и той же строки для каждой проверки папки, поскольку она может выполняться много раз в секунду.

Ответы [ 4 ]

4 голосов
/ 28 июня 2011

Создайте Handler, который подклассов любой другой функциональности вам нужно.Сохраните либо последние, либо все ранее зарегистрированные сообщения, которые вы не хотите * emit снова:

def make_filetype_aware_handler(handler_class):
    class DontRepeatFiletypeHandler(handler_class):

        def __init__(self, *args, **kwds):
            super().__init__(*args, **kwds)
            self.previous_types = set()

        def emit(self, record):
            if not record.file_type in self.previous_types:
                self.previous_types.add(record.file_type)
                super().emit(record)
    return DontRepeatFiletypeHandler

FiletypeStreamHandler = make_filetype_aware_handler(logging.StreamHandler)

logger = logging.getLogger()
logger.addHandler(FiletypeStreamHandler(sys.stderr))
logger.debug('Found file of type %(file_type)', file_type='x-type/zomg')
0 голосов
/ 28 июня 2011

Журнал менее важных событий с более низким приоритетом, как DEBUG.См. setLevel и SysLogHandler .

Во время разработки установите уровень на DEBUG, и по мере развития вашего приложения установите для него более приемлемые значения, такие как INFO или ERROR.

Ваше приложение должно что-то делать с ошибками, например, удалять файлы неправильного типа и / или создавать недостающие файлы;или переместите неправильно сконфигурированные каталоги из опроса заданий в место карантина, чтобы ваш журнал не был заполнен.

0 голосов
/ 28 июня 2011
import logging
logger = logging.getLogger(test)
# logging to a file
hdlr = logging.FileHandler(test.log)
formatter = logging.Formatter('%(asctime)s %(filename)s %(lineno)s %(levelname)s %    (message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr) 
logger.setLevel(logging.DEBUG) 

Затем в цикле вы должны проверить тип файла и наличие файла или нет. Затем добавьте:

logger.debug('File Type : %s ' % file_type)

также

if file_present:
    logger.debug('File Present : %s ' % present)
0 голосов
/ 28 июня 2011

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

Если это ваша проблема, я бы создал набор файловых типов, которые вы уже зарегистрировали. Однако вы должны быть осторожны, если это будет работать вечно, вы в конечном итоге потерпите крах.

from sets import Set
logged = Set()
while yourCondition:
   file_type = get_next_file_type()
   needToLog = #determine if you need to log this thing

   if needToLog and (not file_type in logged):
      logger.info("BAH! " + file_type)
      logged.add(file_type)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...