2016-04-19 33 views
1

我很新的PowerShell腳本。我想使用out-gridview在gridview中顯示日誌文件。使用Out-gridview顯示日誌

比方說,我有一個像

$logFile = "logs\myCoolLogFile.log"; 
gc -wait $logFile | Out-GridView -Wait 

這將顯示每行中的一個單元格一個非常簡單的腳本。我的日誌被格式化這樣的:

LEVEL TIMESTAMP LOGGERNAME [THREAD]: MESSAGE 

每個條目由一個或多個空格分隔(但我可以很容易地將其更改爲一個製表符分隔,如果它是更適合)。該消息可能包含更多空間。以前的條目不包含空格。

我想有不同的列LEVELTIMESTAMP等,但我不知道如何實現這一點。任何幫助表示讚賞。

編輯:作爲@jisaak要求,這裏是我的日誌與多線消息的一個示例:

WARN 09:53:49.938 n.s.e.CacheManager [StartStop-Thread] Creating a new instance of CacheManager using the diskStorePath "C:\temp" which is already used by an existing CacheManager. 
The source of the configuration was net.sf.ehcache.[email protected]48666bf4. 
The diskStore path for this CacheManager will be set to C:\temp\ehcache_auto_created_1461052429938. 

EDIT2:現在,我想想,我想這如果不包含足夠列的行將被完全跳過,則可以接受。但我也需要幫助。

+0

那麼,你可以使用正則表達式解析日誌文件,但也許你可以控制日誌的輸出並使用xml或json格式化程序? –

回答

1

可以使用ConvertFrom-Csv cmdlet來日誌轉換:

$logFile = "logs\myCoolLogFile.log"; 
gc $logFile | ConvertFrom-Csv -Delimiter ' ' | Out-GridView 

爲什麼您使用的Get-Content cmdlet中-wait開關?

+0

我認爲這是必要的,以便在更新文件本身時更新gridview的內容。我錯了嗎? – samjaf

+0

啊,你說得對。非常好 - 不知道! –

+0

您的解決方案几乎就像一個魅力(我將日誌格式轉換爲製表符作爲分隔符)。但是日誌文件可能包含多行消息。由於每個新行都沒有在文件中引用製表符,因此它被識別爲第一列並打印在「級別」列內。你有什麼想法如何可以避免? – samjaf