2011-05-17 1 views
0

J'ai un programme Java qui fonctionne comme 3 processus distincts sur le même serveur. Je voudrais que tous les processus partagent un seul fichier journal, existe-t-il un moyen de spécifier cela dans un fichier logging.properties? J'utilise java.util.logging pour gérer la journalisation.Comment faire pour que plusieurs instances de programme Java partagent le même fichier FileHandler de journalisation?

Actuellement, voici comment je définis mon FileHandler dans mon fichier logging.properties:

java.util.logging.FileHandler.pattern =% h/log/LogFile.log

Cela fonctionne bien pour 1 instance du programme, mais si je tente de lancer 3 instances distinctes du programme est le résultat:

LogFile.log logfile.log.1 logfile.log.2

Tous les conseils sur ce ?

Thankyou

+0

Comme @Laurent souligne, par écrit à un seul fichier est une mauvaise idée. Que diriez-vous de les combiner après le fait? Les entrées dans tous les fichiers seront basées sur la même horloge, il ne faudrait donc pas beaucoup pour combiner et trier les entrées dans l'ordre chronologique. Vous pourriez même être en mesure de le faire en temps réel en utilisant un outil semblable à la queue, mais je ne peux pas dire si un existe déjà. –

Répondre

0

écriture dans le même fichier à partir de différents processus (différents) n'est pas JVM recommandé.

Le seul moyen sûr de le faire est de verrouiller le fichier, de l'ouvrir, de lui écrire et de le fermer. Cela ralentit considérablement chaque écriture, ce qui est généralement considéré comme inacceptable pour un enregistreur. Si vous voulez vraiment aller de cette façon, vous pouvez toujours écrire votre propre gestionnaire.

0

Je voudrais écrire un 2ème programme Java - un enregistreur. Les autres processus envoient des messages de journal au programme de journalisation, qui écrit alors dans le fichier journal unique. Vous pouvez communiquer entre les programmes à l'aide de sockets. Here's an example de la façon de le faire.

Paul

0

Développant Paul's answer, vous pouvez utiliser un SocketHandler pour diriger les événements du journal de tous les processus à un seul processus, qui écrit en fait dans un fichier.

La plupart des paquets de journaux fournissent une implémentation simple de cette fonctionnalité. Une autre option largement prise en charge est l'intégration avec la fonction de journalisation du système (journal des événements de Windows ou syslogd).

Questions connexes