2010-06-12 63 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