现在的位置: 首页 > 综合 > 正文

Sharepoint学习笔记—Debug&TroubleShooting–Correlation ID的使用

2012年02月17日 ⁄ 综合 ⁄ 共 3405字 ⁄ 字号 评论关闭

   Correlation ID就是每次请求SharePoint的Web服务器时自动生成的GUID,在我们的Sharepoin网站发生错误的时候,我们可以通过它在日志中查找到该错误的详细信息。它就是“犯罪份子”在现场留下的“指纹”。因此,它对我们跟踪调试Sharepoint具有非常重要的作用。

 一、如何获取到Correlation ID
  一般而言,我们可以从Sharepoint网站的错误页面上看到报错信息中包含的CorrelationID,如下图 。

          

  当然,我们也可以编写代码来主动获取CorrelationID,并提取附加信息发布或保存到我们指定的地方,参见Sharepoint学习笔记—Debug--使用代码获取当前Request的CorrelationID

           

 

 我们还可以从Developer Dashboard那里得到Correlation ID,如下图:

 

 
 二、在PowerShell中使用CorrelationID
  使用PowerShell通过Correlation ID在SharePoint日志中查找详细的错误信息,这种方式的优点就是它可以直接对ULS文件进行处理,但它最明显的缺点就是:你无法使用它来查找同一Farm上的其它Servers中的日志,也无法使用它来访问log数据库。通常的作法是使用Merge-SPLogFile命令(http://65.55.20.225/zh-cn/library/ff607721.aspx)或New-SPLogFile命令(http://65.55.20.225/zh-cn/library/ff607615.aspx)先合并Farm中不同Server上的跟踪日志条目,然后再针对合并后的日志文档进行分析(New-SPLogFile命令的作用是先中止当前正在记录的Log文档,重新开始创建一个新的Log文档,这样可以帮助我们缩小跟踪的范围)。
   当然,如果你没有对Sharepoin进行ULS的配置,Sharepoint就不会把log信息保存到数据库。如下图结合此文(Sharepoint学习笔记—Debug--寻找 WSS_Logging下的ULSTraceLog)对ULS进行配置,

   下图就是配置Sharepoint Trace Log的界面,在此界面上选择要把哪些Event事件写入到log中

   通过此处进入配置界面

  

 

   通过此界面进行设置

      

    如果有些Sharepoint环境,没有创建ULS数据库视图(ULSTraceLog),你就只有通过ULSViewer或Powershell来帮助你进行分析了。
 

   下面是一些常用的提取信息的方法:
   1.根据CorrelationID提取Log记录   
    1.1在全部Log记录中提取 

Get-SPLogEvent |Where{$_.Correlation -eq "a53ba71b-4231-4222-ac7e-4535dcf0c534"} | Format-Table Category, Message -Autosize

    1.2从10分钟前产生的Log记录中提取 

Get-SPLogEvent -StartTime (Get-Date).addminutes(-10) | Where-Object    {$_.correlation -eq “a53ba71b-4231-4222-ac7e-4535dcf0c534″}

   1.3把提取的log记录输出到指定文件中

Get-SPLogEvent| ?{$_.Correlation -eq "a53ba71b-4231-4222-ac7e-4535dcf0c534"} | select Area, Category, Level, EventID, Message | Format-List > D:\MyError.log

    

   2.其它Get-SPLogEvent常见用法 
   1.1 提取过去10分钟,Level为Hight的记录

get-SPLogEvent -StartTime (get-date).AddMinutes(-10) | ?{$_.level -eq “high”}

  1.2 提取过去10分钟,Level为Hight的记录,只提取前25项,并按它们的category进行排序

get-SPLogEvent -StartTime (get-date).AddMinutes(-10) | ?{$_.level -eq “high”} | select correlation, category -first 25 | sort category

  1.3查看过去半个小时里,我们的Timer Jobs都发生了什么事情 

get-SPLogEvent -StartTime (get-date).AddMinutes(-30) -minimumlevel “Medium” | ?{$_.Category -eq “Timer”}

  1.4提取给定时间区间内的记录

Get-SPLogEvent -StartTime "12/04/2007 17:00" -EndTime "12/04/2007 18:00"

  1.5提取前10条和最后2条Events记录

Get-SPLogEvent | select –first 10 –last 2

 

  关于get-SPLogEvent命令,再进一步的用法请参见(http://technet.microsoft.com/zh-cn/library/ff607589.aspx)

 

 三、在ULSViewer中使用CorrelationID
  你可以在ULSViewer中(请从此处下载)使用CorrelationID来设置Filter,从而帮助你快速的定位错误信息。如图:

 

 

 四、在日志数据库(ULSTraceLog)中,使用CorrelationID
   如果你作了适当的设置(请参见 Sharepoint学习笔记—Debug--寻找 WSS_Logging下的ULSTraceLog),你的Sharepoint就会在WSS_Logging的数据库中创建一个名为ULSTraceLog的视图,在这个视图里可以查找到详细的错误信息。使用此方法的好处是:在一个Farm中的所有Server上的event log都要写入到此数据库中.
  首先我们观查一下这个数据库WSS_Logging中的数据表如下图(只截取了部分作为说明)

      

  我们可以看到,针对这些数据表都跟有 "Partition + 数字" 作为后缀,事实上,它们对应的就是一个月取31天的每一天的记录。
  我们再打开ULSTraceLog视图设计看看其代码,也可以看出,它就是取上述相关Partition表的Union集(如下图)。

           
  有了CorrelationID,我们可以使用如下SQL命令来提取我们想要的信息.

select     CorrelationId,RowCreatedTime,  ProcessName,  Area, Category,  EventID,  Message 
 from  dbo.ULSTraceLog
where  CorrelationId='f3449978-ebd5-4491-98cb-0c7861b0237f'

  结果如下:

 

 五、使用第三方的CorrelationID Query Feature

  网上有人提供了第三方的Feature来帮助你在整个Sharepoint Farm中对correlation ID进行查询,你可以从 SharePoint 2010 Query Correlation ID Central Admin Page 下载。使用Add-SPSolution 命令进行安装。

Add-SPSolution   D:\SPShare\TranAddInWsp\CorrelationIdPage-Sharepoint2010.wsp

然后在Administrator Center中进行部署。部署成功后请到Monitor中去找到Logging,如下图

 

进入此功能,输入你的关注的CorrelationID,就可以查询其信息了。

 

 

 

抱歉!评论已关闭.