从日志文件中查找最新的匹配项

Find latest matching entry from log file

我有一个日志文件,全天都在不断写入。 我需要一种方法来检查日志文件,并找到与特定字符串匹配的最后一个条目。

此条目可以是从末尾开始的 5 行或 5000 行。

我不愿意阅读整个日志(一天结束时可能超过 60000 行)。

我也真的不想取出所有匹配的条目然后得到最后一个,因为当事情是 运行 时,匹配的条目可能占三分之一日志。

到目前为止,我能找到的所有内容都是关于使用 Select-String 将所有匹配项放入一个数组,然后获取最后一个,或者使用 (Get-Content xxx) [-1..-x] 获取最后 x 行。两者都不是我需要的。

到目前为止我最接近的是:

$fullResult = (Get-Content $location)[-1 .. -5000] | 
                    Select-String -Pattern $srch -List |
                    Select-Object -First 1

但这并不完美,因为它只读取最后 5000 行,如果我要的结果在第 5001 行,它将失败。

仅仅使用 Where-Object 过滤器有什么问题吗?

Get-Content $location |
  Where-Object { $_ -match $srch } |
  Select-Object -Last 1