Log4j noms de fichiers journaux?
Nous avons plusieurs travaux qui s'exécutent simultanément à utiliser la même info de config pour log4j. Ils sont tous dumping les journaux dans un fichier en utilisant le même appender. Est-il possible d'avoir chaque travail dynamiquement le nom de son fichier journal de sorte qu'ils restent séparés?
Grâce
Tom
source d'informationauteur DIA Tom
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer une propriété système Java pour chaque poste de travail? Si oui, vous pouvez paramétrer comme ceci:
Et puis dans votre log4j.propriétés:
Vous pouvez remplir la propriété système Java avec une valeur à partir de l'hôte de l'environnement (par exemple) qui permettrait d'identifier de manière unique l'instance de l'emploi.
Si les noms sont connus à l'avance, vous pouvez inclure le nom de la tâche lorsque vous ne l'getLogger (). Ensuite, vous pouvez lier les différents appenders de différents enregistreurs, avec des noms de fichiers (ou d'autres destinations).
Si vous ne pouvez pas savoir le nom de la tâche à l'avance, vous pouvez configurer l'enregistreur de données au moment de l'exécution au lieu d'utiliser un fichier de configuration:
Nous avons quelque chose de similaire mis en œuvre dans notre système. Nous stockons les spécifiques les bûcherons dans une table de hachage et d'initialiser les appenders pour chacun d'eux, en tant que de besoin.
Voici un exemple:
Ensuite l'utiliser dans votre travail vous avez juste à utiliser une entrée de ligne comme ceci:
Cela va créer un fichier journal pour chaque nom de la tâche et de le déposer dans son propre fichier avec le nom de la tâche dans n'importe quel répertoire que vous spécifiez.
Vous pouvez jouer avec d'autres types de appenders et, comme l'écrit il continuera ajoutant jusqu'à ce que la JVM est redémarré qui peut ne pas fonctionner si vous exécutez le même travail sur un serveur qui est toujours en place, mais cela donne l'idée générale de la façon dont il fonctionne.
Vous pouvez avoir chaque set d'emploi NDC ou MDC, puis d'écrire un appender qui varie le nom basé sur le NDC ou MDC valeur. La création d'une nouvelle appender n'est pas trop dur. Il peut aussi être un appender qui s'adaptera le projet de loi dans le log4j bac à sable. Commencer à chercher dans http://svn.apache.org/viewvc/logging/log4j/trunk/contribs/
Vous pouvez écrire votre propre appender qui fait son propre nom de fichier, peut-être en utilisant le menu [Fichier.createTempFile](http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html#createTempFile(java.lang.String,%20java.lang.String)) méthode. Si le
FileAppender
classe a été écrit correctement, vous devriez être en mesure de le prolonger ouRollingFileAppender
—et de remplacer lesgetFile
méthode pour renvoyer celui que vous choisissez basé sur les nouvelles propriétés que vous souhaitez ajouter.Bâtiment sur shadit's réponse. Si chaque tâche peut être identifiée par la classe principale méthode a été commencé, vous pouvez utiliser le système de propriété
sun.java.command
qui contais le nom complet de la classe a commencé. Par exemple comme ceci:Je l'utilise avec un TimestampFileAppender comme ceci:
De cette façon, lorsque je suis en développement dans Eclipse-je obtenir un nouveau fichier journal pour chaque nouveau processus que je dirige, identifié par le nom de classe de la classe avec la méthode principale et le temps qu'il a commencé.
Tom vous petit plus ponctuellement spécifier et appenders pour chaque poste de travail. Supposons que vous disposez de 2 jobs correspondant à deux différents packages java com.tom.firstbatch et com.tom.secondbatch, vous auriez quelque chose comme cela dans log4j.xml :
Vous pourriez configurer par programme log4j lors de l'initialisation de l'emploi.
Vous pouvez également définir la log4j.propriétés du fichier lors de l'exécution par l'intermédiaire d'un système de propriété. À partir de la manuel:
En supposant que vous exécutez les travaux de différentes commandes java, cela leur permettra d'utiliser différents log4j.les propriétés des fichiers et des noms de fichiers différents pour chacun.
Sans connaissance précise de la façon dont vos travaux sont exécutés, c'est difficile à dire!
vous pouvez mettre en œuvre suivantes:
Je peut vous envoyer un code par mail si vous le souhaitez...
log4j.enregistreur.com.foo.admin=,AdminFileAppender
log4j.enregistreur.com.foo.rapport=,ReportFileAppender
C'est une autre façon de faire cette tâche.. ici com.foo.admin est le nom complet du paquet