gpt4 book ai didi

linux - 有没有办法捕获请求日志文件中没有响应的行?

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:09 25 4
gpt4 key购买 nike

我在一台 Linux 机器上,并且有一个包含类似条目的日志文件,

...

  • 20170823-164549.475 线程运行
  • 20170823-164550.482 线程运行
  • 20170823-164551.499 LOG_ENTRY_FOR_55897 RequestXML:/* 一些花哨在此请求 XML 文本 */
  • 20170823-164552.454 LOG_ENTRY_FOR_55897 ResponseXML/* 和一些奇特的东西在此回复文本 */
  • /* 一些线程运行行 */
  • 20170823-165438.766 LOG_ENTRY_FOR_55898 RequestXML:/* 另一种花哨在此请求 XML 文本*/
  • 20170823-165439.150 LOG_ENTRY_FOR_55898 ResponseXML/* 另一种花哨在此回复 XML 文本 */
  • /* 更多线程运行行 */

但有时服务器死机并且没有向我发送任何响应。

  • 20170824-185023.126 LOG_ENTRY_FOR_56823 RequestXML:/* 一些花哨在此请求 56823 的 XML 文本,但没有回复*/
  • /* 一些线程运行行 */
  • 20170824-185026.421 LOG_ENTRY_FOR_56824 RequestXML:/*尽你所能请参阅,这是对 56824 的另一个请求,对 56823 没有响应*/

我必须获取那些没有响应的日志条目。到目前为止,我已经使用 GREP 命令并创建了一个新的文本文件,其中的行包括“LOG_ENTRY”。 (我的意思是这个文本文件不包含 THREAD RUN 行,仅包含请求和响应行)。

示例:

  • -请求
  • -req b
  • -req c
  • -res a
  • -res c
  • -res b(如您所见,res b 在 c 之后,因为 c 的响应到达得更快,此日志未排序)
  • -req d
  • -req e(就是这样,e没有响应,只有req)
  • -res d
  • -req f
  • -res f

预期输出:

  • -请求e

有没有办法跟踪这些没有响应的请求?

最佳答案

使用 awk。这期望请求在响应之前出现,但很容易修复:

$ awk '$3=="RequestXML:"{a[$2]=$0} $3=="ResponseXML"{delete a[$2]} END{for(i in a)print a[i]}' file
20170824-185023.126 LOG_ENTRY_FOR_56823 RequestXML: /* SOME FANCY REQUEST XML TEXT HERE FOR 56823 BUT THERE IS NO RESPONSE*/
20170824-185026.421 LOG_ENTRY_FOR_56824 RequestXML: /* AS YOU CAN SEE, HERE IS ANOTHER REQEUST FOR 56824, NO RESPONSE FOR 56823*/

解释:

$ awk '
$3=="RequestXML:" { # request record
a[$2]=$0 # hash record to a, index with LOG_ENTRY_FOR string
}
$3=="ResponseXML" { # response record
delete a[$2] # delete matching request from a
}
END { # in the end
for(i in a) # loop all remaining requests
print a[i] # and output them
}' file

我用它来测试:

20170823-164549.475 THREAD RUN
20170823-164550.482 THREAD RUN
20170823-164551.499 LOG_ENTRY_FOR_55897 RequestXML: /* SOME FANCY REQUEST XML TEXT HERE */
20170823-164552.454 LOG_ENTRY_FOR_55897 ResponseXML /* AND SOME FANCY RESPONSE TEXT HERE */
/* SOME THREAD RUN ROWS */
20170823-165438.766 LOG_ENTRY_FOR_55898 RequestXML: /* ANOTHER FANCY REQUEST XML TEXT HERE*/
20170823-165439.150 LOG_ENTRY_FOR_55898 ResponseXML /* ANOTHER FANCY RESPONSE XML TEXT HERE */
/* SOME MORE THREAD RUN ROWS */
But sometimes the server is dead and sends me no response.
20170824-185023.126 LOG_ENTRY_FOR_56823 RequestXML: /* SOME FANCY REQUEST XML TEXT HERE FOR 56823 BUT THERE IS NO RESPONSE*/
/* SOME THREAD RUN ROWS */
20170824-185026.421 LOG_ENTRY_FOR_56824 RequestXML: /* AS YOU CAN SEE, HERE IS ANOTHER REQEUST FOR 56824, NO RESPONSE FOR 56823*/

编辑:要修复文本“RequestXML:”和缩短的 XML 文本未分隔,其中没有空格,我们停止进行精确比较 $3=="..." ,而是使用正则表达式匹配 $3~/^.../:

$ awk '$3~/^RequestXML:/{a[$2]=$0} $3~/^ResponseXML/{delete a[$2]} END{for(i in a)print a[i]}' file

关于linux - 有没有办法捕获请求日志文件中没有响应的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48901658/

25 4 0
文章推荐: python - 使用 beautiful soup - 提取
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com