我有很多日志文件,我希望从特定的跟踪编写器中提取不同的错误消息。
日志文件是SharePoint ULS日志。
标题是: 时间戳 处理 TID 区域 类别 事件ID 水平 信息 相关性
所以给定一个特定的进程名称,我想要所有不同的消息。
如果我要使用SQL,我会写这样的东西:
从像'myprocessname'
这样的过程中选择Distinct Message我想在整套日志文件中使用powershell执行此操作。
我认为ULS日志是制表符或空格分隔的。
答案 0 :(得分:2)
您可能对Microsoft的Log Parser感兴趣,它本质上允许您跨一组日志文件运行SQL语句。您也可以将它与Powershell一起使用。以下是一些链接:
答案 1 :(得分:0)
假设日志文件不是太大,您可以使用Import-Csv读取内容,如下所示:
$data = Import-Csv .\log.csv -Delimiter "`t"
我假设分隔符是制表符,因为任何消息都可能包含空格。获得日志数据后,您可以使用标准的PowerShell查询运算符,如下所示:
$data | Where {$_.Process -eq 'processname.exe'} | Select Message -Unique
如果日志文件很大(导致Import-Csv占用太多内存),那么我会尝试使用Log Parser或使用正则表达式并解析日志,一次一行。