14 votes

noms des fichiers journaux de log4j ?

Nous avons plusieurs tâches qui s'exécutent simultanément et qui doivent utiliser les mêmes informations de configuration pour log4j. Ils déversent tous les journaux dans un fichier en utilisant le même appender. Existe-t-il un moyen de faire en sorte que chaque tâche nomme dynamiquement son fichier journal afin qu'ils restent séparés ?

Merci
Tom

1voto

runaros Points 664

Construire sur shadit La réponse de l'entreprise. Si chaque travail peut être identifié par la méthode principale de la classe qui a été lancée, vous pouvez utiliser la propriété système sun.java.command qui contient le nom complet de la classe lancée. Par exemple, comme ceci :

log4j.appender.LOGFILE.File=${sun.java.command}.log

Je l'utilise avec un TimestampFileAppender comme ça :

log4j.appender.LOGFILE=TimestampFileAppender
log4j.appender.LOGFILE.TimestampPattern=yyyy_MM_dd__HH_mm
log4j.appender.LOGFILE.File=${sun.java.command}_{timestamp}.log

Ainsi, lorsque je développe dans Eclipse, j'obtiens un nouveau fichier journal pour chaque nouveau processus que je lance, identifié par le nom de la classe avec la méthode main et l'heure à laquelle il a été lancé.

0voto

Phill Sacre Points 16238

Vous pourriez configurer log4j de manière programmatique lors de l'initialisation du travail.

Vous pouvez également définir le fichier log4j.properties au moment de l'exécution via une propriété système. De la manuel :

Définissez la variable de chaîne de ressources à la valeur de l'option log4j.configuration propriété du système. La meilleure façon de spécifier le fichier d'initialisation par défaut est d'utiliser la propriété système log4j.configuration. Si la propriété système log4j.configuration n'est pas définie, définissez la variable string resource à sa valeur par défaut "log4j.properties".

En supposant que vous exécutez les travaux à partir de différentes commandes java, cela leur permettra d'utiliser différents fichiers log4j.properties et différents noms de fichiers pour chacun d'eux.

Sans connaissance spécifique de la façon dont vos emplois sont gérés, il est difficile de se prononcer !

0voto

Alexandre Victoor Points 1814

Tom, vous pourriez spécifier des appenders pour chaque travail. Imaginons que vous ayez 2 travaux correspondant à deux paquets java différents com.tom.firstbatch et com.tom.secondbatch, vous auriez quelque chose comme ceci dans log4j.xml :

   <category name="com.tom.firstbatch">
      <appender-ref ref="FIRST_APPENDER"/>
   </category>
   <category name="com.tom.secondtbatch">
      <appender-ref ref="SECOND_APPENDER"/>
   </category>

0voto

pgras Points 7202

Vous pouvez mettre en œuvre ce qui suit :

  • Un détenteur de ThreadLocal pour l'identité de votre travail.
  • Extend FileAppender, votre FileAppender doit conserver une Map contenant un QuietWriter pour chaque identité de travail. Dans la méthode subAppend, vous obtenez l'identité de votre travail à partir du ThreadLocal, vous recherchez (ou créez) le QuietWriter et y écrivez...

Je peux vous envoyer du code par mail si vous le souhaitez...

0voto

Vishal Zanzrukia Points 763

Log4j.logger.com.foo.admin=,AdminFileAppender log4j.logger.com.foo.report=,ReportFileAppender

C'est une autre façon d'effectuer cette tâche ici com.foo.admin est le nom complet du package

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X