2017-08-25 3 views
1

J'ai une application distribuée existante utilisant log4j pour écrire des journaux sur le serveur local. Je souhaite conserver la fonctionnalité existante et également envoyer certains de ces journaux à un référentiel central. J'ai vu des exemples d'utilisation de log4j avec SocketAppender pour envoyer un journal à un serveur distant, mais n'ont pas vu un exemple d'envoi de plusieurs serveurs au même serveur distant écrivant les journaux de chaque serveur dans un fichier séparé. Y a-t-il un exemple de ceci? Comme alternative, je suis curieux d'utiliser JDBCAppender en utilisant une base de données en tant que référentiel centralisé mais j'ai la même question concernant la façon de différencier l'origine des messages lors de l'affichage des résultats de la requête. Existe-t-il un paramètre de propriétés log4j identifiant l'expéditeur pouvant être interprété sur le serveur d'écoute?Log4j et la centralisation de la collecte de journaux

Répondre

0

Pour votre première question - cela dépend du serveur distant à qui votre programme client envoie des journaux. Si vous avez développé un certain programme pour recevoir les journaux sur le serveur distant puis, il y a 2 approches pour créer un fichier séparé journal pour chaque client ouvre une session -

  1. programme serveur doit écouter sur un port particulier et après avoir reçu des journaux, il devrait vérifier l'adresse IP du client, puis créer un fichier journal pour chaque IP client.

  2. Créer un programme serveur pour écouter sur un port différent pour chaque client et une fois que le client est connecté à son port spécifique, recevoir les données et les sauvegarder dans un fichier journal. Cette approche semble facile mais pas recommandée.

Si votre serveur est basé sur linux, je vous recommande d'utiliser rsyslog pour centraliser la collecte des journaux. Dans rsyslog, vous pouvez configurer chaque client séparément et vider les journaux dans un fichier journal distinct.

Pour la deuxième question - vous pouvez utiliser Nested diagnostic Context (NDC) fonction de log4j pour l'écriture hostname dans la base de données. Voir l'exemple this. Cet exemple utilise USER_ID comme colonne supplémentaire pour l'écriture dans la base de données. De même, vous pouvez utiliser cette colonne supplémentaire pour écrire hostname. Dans le démarrage de votre programme client avant d'écrire une déclaration de journal, vous devez mettre valeur dans NDC en utilisant le code ci-dessous -

NDC.push(InetAddress.getLocalHost().getHostName());