2010-10-29 9 views
1

Dans notre produit, nous utilisons un certain nombre de bibliothèques externes. Nous faisons notre journalisation avec log4j, et la plupart des bibliothèques le font aussi, ainsi nous recevons la plupart des messages dans nos applications.rediriger System.out/System.err vers log4j pour certains pots seulement

Mais il existe plusieurs bibliothèques qui utilisent simplement System.out et System.err. Donc, je cherche un moyen de rediriger System.out et System.err à nos appender log4j pour un jar spécifique seulement, les autres bibliothèques qui utilisent log4j ne devraient pas être affectées, et celles-ci impriment parfois à System.out et System.err aussi, et ces messages devraient toujours y aller.

Est-ce que c'est possible?

Répondre

1

Hypothesis - Jamais essayé

  • Créez des niveaux de journal. Le niveau doit être inférieur Level.ALL
  • Substituez le flux d'impression std à votre propre flux. Effectuer la fois la console et connectez-sortie avec votre niveau personnalisé
  • Créer nouvelle catégorie pour vous devez package et définir son niveau de journalisation à votre niveau de journalisation personnalisé

exemple de code utiles

http://blogs.oracle.com/nickstephen/entry/java_redirecting_system_out_and

et

log4j redirect stdout to DailyRollingFileAppender

1

Je ne sais pas si vous peut obtenir le flux de sortie log4j appender mais si vous voulez juste l'envoyer à un fichier journal, vous pouvez diriger system.out vers un fichier comme ci-dessous:

 


File file = new File("my.log"); 
PrintStream printStream = new PrintStream(new FilleOutputStream(file)); 
System.setOut(printStream); 

 

Vous pouvez faire la même chose pour System.err

J'aime le premier lien de Faheem, il a la solution pour rouler le fichier.

Questions connexes