如何使用 awk 或 grep 在日志文件中捕获整个 Python 回溯?

Kev*_*rke 8 python logging awk grep

日志文件包含许多 Python 回溯。我只关心由于KevinCustomError. 文件中可能有多个此类错误。

我如何使用grep另一个流行的 unix 命令或其组合来转储特定错误的整个回溯?

这是一个示例日志文件。我想要这个文件的第 1-3 行。在真实的日志文件中,回溯要长得多。

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
KevinCustomError: integer division or modulo by zero
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)

voi*_*hos 2

这是我尝试组合在一起的 AWK 脚本。

awk '{a[NR]=$0}; /KevinCustomError/ {for(i=0; a[NR-i] !~ /Traceback/; i++) {} i++; while(i-- >= 0) {print a[NR-i]}}' logfile
Run Code Online (Sandbox Code Playgroud)

或者,以文件形式。

{a[NR] = $0};

{
    if ($0 ~ /KevinCustomError/)
    {
        for (i = 0; a[NR-i] !~ /Traceback/; i++)
        {}
        i++
        while (i-- >= 0)
        {
            print a[NR-i];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法如下:awk -f logscript.awk logfile.

对AWK不太熟悉,欢迎批评指正。基本上,它会跟踪到目前为止读取的所有行,并且仅向后搜索以查找“Traceback”标记(如果您愿意,可以替换它),然后打印其间的所有内容(以正确的顺序)。