2010-06-12 62 views
1

我知道log4j默認輸出爲stderror。捕獲log4J與grep輸出

我已經拍攝了把我的應用程序的使用下面的命令:

application_to_run 2> log ; cat log | grep FATAL 

有沒有辦法捕捉到沒有輔助文件的輸出?

+0

如果您確實需要使用臨時文件出於某種原因,'cat'是不必要的:'app 2> log; grep FATAL日誌' – 2010-06-12 13:26:58

回答

2

如果你想同時stdoutstderr,用途:

(application_to_run 2>&1) | grep FATAL 

如果你想同時stderr獨自一人,你可以使用:

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

第一個發送數據包文件句柄2所有輸出( stderr)到文件句柄1(stdout),然後管道通過grep。第二個是相同的,但也發送stdout到位桶。這會起作用,因爲重定向是一個地位問題。首先,將stderr重定向到當前的stdout,然後將stdout重定向到/dev/null

+1

在子shell中運行命令有什麼意義? – tokland 2010-06-12 12:34:23

+0

這接近了伎倆。我想知道這也是括號(subshel​​l?)的要點 – 2010-06-12 12:49:04

+0

只是我的習慣,在'bash'中可能不需要 - 我來自原始Bourne殼是最新和最偉大的時代。儘管現代貝殼具有更先進的特徵(以及更少的陷阱),但我仍然發現自己經常回到舊的方式。事實上,我甚至不記得在早期炮彈中是否存在位置問題。這可能只是當時我的導師的一些東西。太退休的方式現在開始改變:-)通過一切手段測試它沒有subshel​​l。如果它有效,它可以節省手指和鍵盤上的一些磨損。 – paxdiablo 2010-06-12 13:18:37

1

如果你問如何重定向標準錯誤標準輸出這樣你就可以在管道中使用它,有兩種方法,我知道的:

$ command 2>&1 | ... 

$ command |& .. 
+0

,正如paxdiablo所說的,「2>&1>/dev/null」會使您僅使用stderr並丟棄stdout。 – tokland 2010-06-12 11:59:13