2010-06-12 4 views
1

Je sais que log4j sort par défaut à stderror.Capture de la sortie log4J avec grep

J'ai capturer les mettre hors de ma demande avec la commande suivante:

application_to_run 2> log ; cat log | grep FATAL 

est-il un moyen de capturer la sortie sans le fichier auxiliaire?

+0

Si vous n'avez besoin d'utiliser le fichier temp pour une raison quelconque, 'cat' est inutile:' app 2> log; grep FATAL log' –

Répondre

2

Si vous voulez à la fois stdout et stderr, utilisez:

(application_to_run 2>&1) | grep FATAL 

Si vous voulez à la fois stderr seul, vous pouvez utiliser:

(application_to_run 2>&1 >/dev/null) | grep FATAL 

Le premier envoie toute sortie à destination de descripteur de fichier 2 (stderr) à la poignée de fichier 1 (stdout), puis les tuyaux à travers grep. La seconde fait de même mais envoie également stdout au bucket. Cela fonctionnera puisque la redirection est une chose positionnelle. Tout d'abord, stderr est redirigé vers le actuelstdout, puis stdout est redirigé vers /dev/null.

+1

Quel est le but de l'exécution de la commande dans un sous-shell? – tokland

+0

Cela semble faire l'affaire. Je me demandais aussi quel est le point des parenthèses (sous-shell?) –

+0

Juste habitude de ma part, probablement pas nécessaire dans 'bash' - je viens d'un âge où l'original Bourne shell était le dernier et le plus grand. Bien que les obus modernes aient des caractéristiques beaucoup plus avancées (et moins de pièges), je me retrouve souvent à revenir aux anciennes méthodes. En fait, je ne peux même pas me souvenir s'il y avait un problème de position dans les premières coquilles. Cela a peut-être été quelque chose de mes mentors à l'époque. Bien trop près de la retraite pour commencer à changer maintenant :-) Testez-le sans le sous-shell. Si cela fonctionne, cela économisera de l'usure sur vos doigts et votre clavier. – paxdiablo

1

Si vous demandez comment rediriger stderr-stdout vous pouvez donc l'utiliser dans un tuyau, il y a deux façons que je connais:

$ command 2>&1 | ... 

$ command |& .. 
+0

et comme le dit paxdiablo, "2> & 1>/dev/null" ne vous laissera qu'avec le stderr et rejettera le stdout. – tokland

Questions connexes