2010-08-18 4 views
2

J'ai plusieurs programmes python qui fonctionnent en parallèle. Je veux écrire un programme python qui gérera les journaux des programmes, ce qui signifie que les autres programmes enverront un message de journal à ce programme et le programme l'écrira dans le fichier journal. Une autre caractéristique importante est que si l'un des programmes tombe en panne, le 'programme de journal de gestion' le saura et pourrait l'écrire dans le fichier journal. J'essaie d'utiliser cet exemple http://docs.python.org/library/logging.html#sending-and-receiving-logging-events-across-a-network mais j'ai échoué.python log manager

Quelqu'un peut-il m'aider s'il vous plaît?

+3

Non sans le code que nous ne pouvons pas. Je peux peut-être voir un problème dans votre réflexion sur l'opération: vous parlez d'un gestionnaire de processus distinct du gestionnaire de journaux. Ces deux tâches sont mieux gérées par un gestionnaire de processus qui génère des processus de travail, surveille leur état, les redémarre au besoin et ** agrège aussi leurs messages de journal à partir d'un tuyau établi lors de la création du sous-processus. Etudiez le module multitraitement Python, assurez la supervision du processus et la journalisation devrait être beaucoup plus facile. – msw

Répondre

1

J'ai écrit un enregistreur python qui fait exactement cela (même avec le support de mpi). Il est disponible à https://github.com/JensTimmerman/VSC-tools/blob/master/vsc/fancylogger.py

Cet enregistreur peut se connecter à un port udp sur un ordinateur distant.

Là, je lance un démon qui collecte les journaux et les écrit dans le fichier: https://github.com/JensTimmerman/VSC-tools/blob/master/bin/logdaemon.py

Ce script démarre le démon pour vous: https://github.com/JensTimmerman/VSC-tools/blob/master/bin/startlogdaemon.sh

Si vous commencez alors vos processus de python et de les exécuter en parallèle avec mpi par exemple, vous aurez seulement besoin d'utiliser fancylogger.getLogger() et l'utiliser comme un logger python normal. Il va récupérer les variables d'environnement définies avec le script, se connecter à ce serveur, et avoir des informations mpi supplémentaires dans les enregistrements du journal. (Comme le numéro de fil mpi)

Si vous n'utilisez pas mpi vous aurez deux options:

  • définir les variables « FANCYLOG_SERVER » et « FANCYLOG_SERVER_PORT » manuellement dans chaque coquille où vous commencez le python à distance processus

  • ou de démarrer le démon. Et dans les scripts python obtenir votre enregistreur

comme ceci:

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