Connexion de plusieurs applications / processus à un seul fichier journal
Nos serveurs d'application (weblogic) toute utilisation de log4j pour ouvrir une session sur le même fichier sur un partage réseau. Sur le dessus de cela, nous avons toutes les applications web dans un serveur géré la journalisation des erreurs à une erreur commune.journal. Je ne peux pas imaginer que c'est une bonne idée, mais je voulais entendre depuis quelques avantages. Je sais que chaque application web a son propre chargeur de classe, de sorte que toute la synchronisation des threads ne se produit que dans l'application. Donc ce qui arrive lorsque plusieurs processus de démarrage convergent sur un seul fichier journal? Peut-on s'attendre entrecoupées journal des états? Les problèmes de Performance? Ce sujet de plusieurs applications web de la journalisation d'un fichier journal commun? L'environnement est Solaris.
source d'informationauteur Andrew
Vous devez vous connecter pour publier un commentaire.
C'est généralement une mauvaise idée de ne pas avoir synchronisé accès en écriture à un fichier et certainement la mauvaise programmation de la pratique. Le seul cas où il pourrait fonctionner est un ajout à un fichier sur l'ordinateur local - tout le monde ajoute des lignes à la fin du fichier.
Mais, étant donné que votre fichier est sur le réseau de l'action, il ne sera probablement rapidement se transformer en poubelle. Vous ne dites pas qui a distribué du système de fichiers que vous utilisez, mais pour NFS, vous pouvez trouver des explications sur open(2) l'homme page:
Bien sûr, c'est C, mais depuis Java est implémenté en C, il ne peut pas faire mieux (au moins en ce qui concerne les appels système:-)).
Dans prudent mode logback en toute sécurité-gérer plusieurs machines virtuelles, éventuellement, sur des hôtes différents écrit au même réseau de partage de fichier. Il peut même temporaire des pannes de réseau. Les performances devraient être tout à fait acceptable pour quelques nœuds, disons 4 ou moins. Pour 5 ou plusieurs nœuds de journalisation fortement vous remarquerez peut-être un gain de performance.
Nous avons une condition où nous avons besoin de produire un fichier unique à partir de tous les serveur géré exécuter la même application . nous avons développé un enregistrement de java serveur qui ouvre ups d'un port et d'écouter pour le journal des événements. nous avons utilisé le log4j socket appender à l'écriture du journal des événements sur le même port et créé un fichier unique.
Nous utilisons org.apache.log4j.net.SyslogAppender pour se connecter à un seul appareil à l'aide de syslog, et il a bien fonctionné pour nous. Je recommande d'étudier dans cette comme une alternative.
Cela ressemble à une très mauvaise idée (corrompre les journaux, les incertitudes liées à la source d'une entrée de journal sont deux des raisons qui viennent à l'esprit). Si vous utilisez Log4j dans Weblogic comme ça, je vous le conseille par-le-livre. Cela vous permettra d'utiliser un fichier pour l'ensemble de l'application serveur sans aucun problème.
La suggestion de syncronizing le journal de l'écriture n'a pas de sens pour moi, comme vous serait essentiellement le blocage de toutes les applications dans l'app serveur quand ils écrivent un journal. Si la journalisation est fréquente, qui va ralentir de manière significative.
Comme pour de multiples serveurs d'application, vous avez besoin d'utiliser autre chose que le fichier de l'enregistrement si vous les voulez tous les états. Il ya quelques façons de le faire, on est à se connecter à différents fichiers, et d'un autre processus de combiner, mais la meilleure option est probablement d'utiliser un réseau en fonction de journalisation de dépôt, à l'aide Log4j est SocketAppender ou d'une autre méthode (nathan mentionne SyslogAppender ce qui est excellent si vous voulez un Syslog) pour s'assurer que l'accès au fichier n'est pas corrompue.
Si possible utiliser un fichier différent pour chaque instance. Cela donnera le meilleur résultat avec le moins d'efforts.
La logback alternative à log4j a une prudente de la mode de son journal, l'écrivain qui explicitement à sauter à travers des cerceaux pour s'assurer que de nouvelles choses sont écrites à la fin du fichier. Je ne pense pas que ce sera le travail sur les partages réseau ensuite.
Si vous DEVEZ avoir un enregistrement central de l'emplacement, puis envisager de mettre en place un serveur qui accepte les événements du journal et de les écrire dans les fichiers appropriés. Cela permettra de s'assurer qu'il est un seul processus réellement accéder au système de fichiers, et permettra également à la JVM de l'aide tout en termes de synchronisation, etc
Meilleur des cas j'imagine que vous avez un potentiel de rendement problème avec la synchronisation d'accès pour le fichier journal de ressources. Pire serait de certains des scénarios que vous mentionnez.
Je voudrais poser deux Qs: a) quel était le but recherché avec cette config et b) pouvez-vous trouver une meilleure solution technique pour atteindre l'objectif.
Ma conjecture est que vous avez un sysadmin qui veut obtenir un "seul fichier journal pour le système." Le fichier est mis sur le partage réseau pour le rendre facile à obtenir. La meilleure réponse pour l'objectif pourrait être de plusieurs fichiers, local à chaque système et quelque chose comme http://www.splunk.com/ pour un bon moniteur.