2010-08-18 2 views
2

У меня есть несколько программ на основе python, которые работают параллельно. Я хочу написать программу python, которая будет управлять журналами программ, а это означает, что другие программы отправят сообщение журнала этой программе, и программа запишет ее в файл журнала. Другая важная особенность заключается в том, что если одна из программ выйдет из строя, «программа управления журналом» будет знать об этом и может записать ее в файл журнала. Я пытаюсь использовать этот образец http://docs.python.org/library/logging.html#sending-and-receiving-logging-events-across-a-network , но я потерпел неудачу.python log manager

Может ли кто-нибудь мне помочь?

+3

Не без кода мы не можем. Возможно, я вижу проблему в вашем мышлении об операции: вы говорите о диспетчере процессов, отличном от менеджера журналов. Эти две задачи лучше всего обрабатываются диспетчером процессов, который запускает рабочие процессы, контролирует их состояние, перезапускает их по мере необходимости и ** также ** объединяет свои сообщения журнала из трубы, установленной во время создания подпроцесса. Изучите модуль многопроцессорности Python, проверьте правильность процесса, а затем журнал должен быть намного проще. – msw

ответ

1

Я написал регистратор python, который делает именно это (даже с поддержкой mpi). Доступно по адресу https://github.com/JensTimmerman/VSC-tools/blob/master/vsc/fancylogger.py

Этот регистратор может подключаться к порту udp на удаленной машине.

Там я бегу демон, который собирает журналы и записывает их в файл: https://github.com/JensTimmerman/VSC-tools/blob/master/bin/logdaemon.py

Этот скрипт запустит демон для вас: https://github.com/JensTimmerman/VSC-tools/blob/master/bin/startlogdaemon.sh

Если вы затем запустите процессы питона и запускать их Параллельно с mpi, например, вам нужно будет использовать fancylogger.getLogger() и использовать его в качестве обычного регистратора python. Он подберет переменные окружения, установленные с помощью сценария, запустится на этот сервер и добавит дополнительную информацию о mpi в записи журнала. (Например, число МПИ нить)

Если вы не используете МПИ у вас будет два варианта:

  • установить «FANCYLOG_SERVER» и переменные «FANCYLOG_SERVER_PORT» вручную в каждой оболочке, когда вы начинаете удаленный питона процесс

  • или просто запустите демон. И в сценарии питона получить ваш регистратор

так:

import fancylogger 
fancylogger.logToUDP(hostname, port=5005) 
logger = fancylogger.getLogger()