因此,我有以下日志示例:
2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 1
2015-03-30 10:19:45,250 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 2
2015-03-30 10:19:45,700 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] log message of exception occurred in
abc.cdef.class.sdk.SampleException: Message exception..
<stacktrace lines goes here>
2015-03-30 10:19:46,100 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 3
2015-03-30 10:19:46,120 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 4
2015-03-30 10:19:46,120 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d800e80-5276-4006-a44d-dd4cea7bcbe1 Info:P13 Code:AB4D] A log message 6
服务器中的每个请求都是唯一的IDA。我想对具有特定IDA的所有日志行进行grep,然后将其与所有已发现的事件一起放入另一个日志文件中。我之所以使用grep,是因为它还会在找到这些模式的位置附加文件和行号(grep –n)(搜索是在2个或3个文件中进行)。但是,我仍然希望包括stacktrace异常,这不会发生,因为这些行没有我要搜索的IDA。
此外,该堆栈跟踪异常也可能作为特定IDA的最后一个条目的一部分发生,如下所示:
2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 1
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:BECD] A log message 2
2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:DFCD] A log message 3
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:BBCD] A log message 4
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCC] log message of exception occurred in
abc.cdef.class.sdk.SampleException: Message exception..
<stacktrace lines goes here>
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:ed8ede83-1116-4697-a69d-ee6cd575cbe7 Info:P23 Code:ABDD] A log message 5
有什么建议可以做到这一点?
PS1-我一直在搜索,但是我最多发现标签之间的搜索,在我看来这还不够好。
PS2-我的解决方案目前仅是一个线性grep,但我对其他解决方案持开放态度,例如perl,awk,sed,python或任何其他“ bash命令方式”。
Perl解决方案:
perl -ne '$id = "6d87de8e-1276-4496-b49d-dd4cd375cbe4";
print if $match = (/IDA:$id/ .. /IDA:(?!$id)/)
and $match !~ /E0$/
' *.log
解释:
/regex1/ .. /regex2/
对于匹配项之间的行,返回true。IDA:(?!$id)
表示IDA:
不跟$ id。E0
条件检查的后缀表示,因此不会打印最后一行(具有不同IDA的那一行)。要包括文件名和行号,请使用
print "$ARGV:$.:$_"
并在结束语前添加以下内容:
; $. = 0 if eof
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句