2010-08-16 12 views
8

J'ai trois processus fonctionnant sous mon réacteur torsadé: Orbited, WSGI (django courant), et Twisted lui-même.Enregistrement en boucle

J'utilise actuellement

log.startLogging(sys.stdout) 

Quand tout le journal sont dirigés vers le même endroit, il y a trop d'inondations.

Une ligne de mon journal de WSGI est comme ceci:

2010-08-16 02:21:12-0500 [-] 127.0.0.1 - - [16/Aug/2010:07:21:11 +0000] "GET /statics/js/monitor_rooms.js HTTP/1.1" 304 - "http://localhost:11111/chat/monitor_rooms" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8" 

Le temps est répété deux fois au fond. Je pense que je devrais utiliser mon propre formatter, mais malheureusement je ne peux pas le trouver dans les docs tordues (il n'y a rien à se connecter il)

  1. Quelle est la meilleure façon de traiter l'exploitation forestière de 3 sources? Quel kwargs dois-je transmettre à quelle fonction dans twisted.log pour configurer mon propre formateur (startLogging ne contient pas la réponse)
  2. Quelle est une meilleure solution que ce que j'ai suggéré? (Je ne suis pas vraiment expérimenté dans la configuration des enregistreurs.)

Répondre

1

Heh. Je pense exactement à ce problème. Ce que j'ai trouvé est une application Twisted séparée qui enregistre les messages qu'elle reçoit sur une socket. Vous pouvez configurer la journalisation Python à envoyer à un socket et vous pouvez configurer la journalisation de Twisted pour l'envoyer à la journalisation Python. Vous pouvez donc tout obtenir pour envoyer des messages de journalisation à un seul processus (qui utilise ensuite la journalisation de Python pour les enregistrer sur le disque).

J'ai une preuve initiale du code concept au http://www.acooke.org/cute/APythonLog0.html

La principale chose manquante est que ce serait bien d'indiquer quel message est venu de la source. Je ne suis pas certain de la meilleure façon d'ajouter cela (une approche serait d'exécuter le service sur trois ports différents et d'avoir un préfixe différent pour chacun).

PS Comment fonctionne Orbited? C'est sur ma liste suivante ...

11

Vous pouvez utiliser l'argument mot-clé system pour twisted.python.log.msg pour personnaliser le message.

En supposant que vous avez:

log.msg("Service ready for eBusiness!", system="enterprise") 

Vous aurez sortie la connexion comme ceci:

2010-08-16 02:21:12-0500 [enterprise] Service ready for eBusiness! 

Vous pouvez alors chacun de vos services ajouter system="wsgi/orbited/..." à leurs appels log.msg et log.err.

J'ai trouvé this en cherchant la source la dernière fois que je travaillais avec Twisted.