Padrão de cauda com contexto em Powershell

1

Se eu seguir um log assim:

gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple | % {write $_.Context.PreContext $_.Line $_.Context.PostContext}

funciona como esperado cuspindo linhas contendo "Exception", mas quando tento adicionar algum contexto como este:

gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple -cont 1,2 | % {write $_.Context.PreContext $_.Line $_.Context.PostContext}

.. funciona da mesma forma, não inclui linhas de contexto. Alguém pode me dizer por que e o que eu poderia fazer para obter linhas de contexto como essa?

    
por gordy 18.12.2015 / 21:20

1 resposta

1

...it just works the same, it doesn't include any context lines.

Porque não há contexto! Você disse explicitamente ao Get-Content para pegar 1 da última linha com -Last 1 , então Select-String recebe apenas uma linha.

Can anyone tell me why and what I could do to get context lines like this?

Claro, tudo o que você precisa fazer é aumentar o número de linhas para o parâmetro Last . Supondo que você corresponde a 1 line na regex e deseja que 1 line antes e 2 depois ( -Context 1,2 ), a quantidade total de linhas seria 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
        }
    
por 23.12.2015 / 10:57