Question

Existe-t-il un moyen d'écrire les événements de journalisation log4j dans un fichier journal également écrit par d'autres applications. Les autres applications pourraient être des applications non java. Quels sont les inconvénients? Problèmes de verrouillage? Formatage?

Était-ce utile?

La solution

Log4j a un SocketAppender, qui enverra des événements à un service, que vous pouvez implémenter vous-même ou utiliser la mise en œuvre simple fournie avec Log4j.

Il prend également en charge syslogd et le journal des événements Windows, ce qui peut s'avérer utile pour tenter d'unifier la sortie de votre journal avec les événements issus d'applications non Java.

Si les performances posent un problème, vous souhaitez un seul service pour l'écriture du fichier journal plutôt que d'essayer de coordonner une stratégie de verrouillage cohérente entre diverses applications de journalisation.

Autres conseils

La meilleure solution consiste peut-être à laisser chaque application se connecter séparément, puis à mettre en place un travail planifié pour "compresser" les fichiers en fonction de l'heure. Si vous avez besoin d’un accès vraiment à jour au journal complet, vous pouvez le lancer toutes les heures.

J'ai une expérience des deux approches suivantes:

  1. Utiliser la base de données pour la journalisation au lieu du fichier texte brut - cela peut être prohibitif à cause de problèmes de performances, en revanche, il est très facile d’analyser les journaux, de créer des rapports. La base de données prend en charge tous les problèmes de simultanéité.
  2. L'autre approche implique l'utilisation du serveur JBoss, qui peut être utilisé pour lire les informations de journalisation à partir d'autres sources. JBoss peut être exécuté dans la configuration minimale et grâce à cela, il est vraiment léger (temps de démarrage de 2 secondes). Les détails peuvent être trouvés ici http://docs.jboss.org/process -guide / fr / html / logging.html (Connexion à un serveur distinct). Log4J prend en charge tous les problèmes de verrouillage / accès simultané.

Si vous n'envisagez pas d'utiliser JBoss, vous pouvez utiliser la deuxième approche comme base de votre propre solution de journalisation.

Je ne pense pas que les appenders log4j par défaut effectuent un verrouillage ou une synchronisation de fichiers. Sans ce verrouillage, vous risquez de perdre des messages de journal ou de les recevoir mutilés.

Je ne sais pas à quel point il est facile de verrouiller des fichiers en Java, mais pour que cela fonctionne directement, je pense qu'il vous faudrait sous-classer l'Appender approprié et remplacer la méthode de journalisation en l'enveloppant d'un code de synchronisation qui se verrouille et se verrouille. déverrouille le fichier. Cela peut avoir des conséquences sur les performances, en fonction de la charge de votre système.

Log4perl a un Appender synchronisé, Log :: Log4perl :: Appender :: Synchronized, qui encapsule un Appender et le fait, et semble également fournir un indicateur dans son Log :: Log4perl :: Appender :: File qui empêche l’entrelacement lignes. Vous pouvez regarder ce qu’ils font pour voir s’il pourrait être répliqué en Java.

Log4j est suffisamment flexible pour que vous puissiez créer des entrées de journal dans un format compatible avec les enregistrements déjà présents dans le fichier. Il suffit de regarder dans les annexes pour savoir comment formater des champs de données spécifiques.

Votre principale préoccupation concernera le verrouillage, probablement d’autres applications. Assurez-vous que toutes les applications n’ont pas de verrou exclusif sur le fichier et tout devrait bien se passer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top