如果我跟踪这样的日志:
gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple | % {write $_.Context.PreContext $_.Line $_.Context.PostContext}
它按预期工作,输出包含“Exception”的行,但是当我尝试添加如下一些上下文时:
gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple -cont 1,2 | % {write $_.Context.PreContext $_.Line $_.Context.PostContext}
..它只是以相同的方式工作,它不包含任何上下文行。有人能告诉我为什么以及我该怎么做才能获得这样的上下文行吗?
答案1
...它只是以相同的方式工作,它不包含任何上下文行。
因为没有上下文!您已明确指示Get-Content
使用 来抓取1
最后一行-Last 1
,因此Select-String
仅接收一行。
谁能告诉我为什么以及我该怎么做才能获得这样的上下文线?
当然,您要做的就是增加Last
参数的行数。假设您1
在正则表达式中匹配行,并且希望在其1
前后添加行2
( -Context 1,2
),则总行数将是1 + 1 + 2 = 4
:
Get-Content -Path 'xxx.log' -Tail 4 |
Select-String -Pattern 'Exception' -SimpleMatch -Context 1,2 |
ForEach-Object {
$_.Context.PreContext
$_.Line
$_.Context.PostContext
}