1

Если я хватаюсь за бревно вот так:

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 ответ1

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
        }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .