如何在SharePoint日志中获取更多信息?
我在生产环境中安装了一个功能,但现在它抛出以下错误: 作业定义的执行方法 SharePointSocialNetworking.Facebook (ID) 528d61e4-95b6-4766-bb98-4363da570506) 抛出了一个异常。更多信息 包括在下面。对象引用 未设置为对象的实例 异常堆栈跟踪:在 SharePointSocialNetworking.Facebook.Execute(Guid targetInstanceId)在 Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobexedData& 数据、Int32和结果) 我的问题是堆栈跟踪在变得有用时停止。。。我需要知道它在Execute方法中的什么地方出错(甚至可能是一个行号)。他们只是给了我足够的信息,让我大致了解问题是什么,而不是问题发生在哪里 是否有任何地方可以获取完整的堆栈跟踪,或准确跟踪“对象引用未设置为对象实例”的位置。是否发生错误 在“管理中心”的“诊断日志”部分中,我将“最不关键的事件甚至报告到事件日志”设置为“错误”,将“最不关键的事件报告到跟踪日志”设置为“详细”如何在SharePoint日志中获取更多信息?,sharepoint,logging,Sharepoint,Logging,我在生产环境中安装了一个功能,但现在它抛出以下错误: 作业定义的执行方法 SharePointSocialNetworking.Facebook (ID) 528d61e4-95b6-4766-bb98-4363da570506) 抛出了一个异常。更多信息 包括在下面。对象引用 未设置为对象的实例 异常堆栈跟踪:在 SharePointSocialNetworking.Facebook.Execute(Guid targetInstanceId)在 Microsoft.SharePoint.Ad
这是用于计时器作业的。因为您的PDB没有打包和部署,所以无法从异常中获取行号 但是我通过构建一个“消息”来解决这个问题。当一个进程发生时,您知道错误发生在哪里,因为“消息”中的值 我的所有sharepoint作业的结构与此类似:
public class CustomJob : SPJobDefinition {
public override void Execute() {
try {
WriteTrace("CustomJob.Execute:");
Process();
WriteTrace("CustomJob.Execute[end]");
} catch (Exception ex) {
WriteTrace(string.Format("CustomJob.Execute\nException: {0}", ex));
}
}
public void Process() {
string message = "CustomJob.Process\n";
try {
//do something
message += "value1: " + value1 + "\n";
//do something
message += "value2: " + value2 + "\n";
//do something
message += "value3: " + value3 + "\n";
} catch (Exception ex) {
WriteTrace(string.Format("CustomJob.Process\nException: {0}", ex));
}
WriteTrace(message);
}
private void WriteTrace(string message) {
//configure how you need, either write to ULS or write to event log
SPDiagnosticsService.Local.WriteTrace(0,
new SPDiagnosticsCategory("My Category",
TraceSeverity.Unexpected,
EventSeverity.Error),
TraceSeverity.Unexpected, message, ex.StackTrace);
}
}
这使我能够相当准确地跟踪开发和生产中的大多数错误
编辑
有很多方法可以在2007年写入跟踪日志(当然更复杂)
但我只是直接在事件日志中写道:
EventLog el1 = new EventLog();
el1.Source = "My Custom Source";
el1.WriteEntry(message, EventLogEntryType.Information);
因为您的PDB没有打包和部署,所以您无法从异常中获取行号 但是我通过构建一个“消息”来解决这个问题。当一个进程发生时,您知道错误发生在哪里,因为“消息”中的值 我的所有sharepoint作业的结构与此类似:
public class CustomJob : SPJobDefinition {
public override void Execute() {
try {
WriteTrace("CustomJob.Execute:");
Process();
WriteTrace("CustomJob.Execute[end]");
} catch (Exception ex) {
WriteTrace(string.Format("CustomJob.Execute\nException: {0}", ex));
}
}
public void Process() {
string message = "CustomJob.Process\n";
try {
//do something
message += "value1: " + value1 + "\n";
//do something
message += "value2: " + value2 + "\n";
//do something
message += "value3: " + value3 + "\n";
} catch (Exception ex) {
WriteTrace(string.Format("CustomJob.Process\nException: {0}", ex));
}
WriteTrace(message);
}
private void WriteTrace(string message) {
//configure how you need, either write to ULS or write to event log
SPDiagnosticsService.Local.WriteTrace(0,
new SPDiagnosticsCategory("My Category",
TraceSeverity.Unexpected,
EventSeverity.Error),
TraceSeverity.Unexpected, message, ex.StackTrace);
}
}
这使我能够相当准确地跟踪开发和生产中的大多数错误
编辑
有很多方法可以在2007年写入跟踪日志(当然更复杂)
但我只是直接在事件日志中写道:
EventLog el1 = new EventLog();
el1.Source = "My Custom Source";
el1.WriteEntry(message, EventLogEntryType.Information);
如果它是您的自定义计时器作业,为什么不通过附加到owstimer.exe以交互方式调试它呢。请参阅调试计时器作业:
关于跟踪问题,您可以将
异常
对象字符串的StackTrace
属性记录到跟踪日志中,如其他帖子所示。如果是自定义计时器作业,为什么不通过附加到owstimer.exe以交互方式调试它呢。请参阅调试计时器作业:
关于您的跟踪问题,您可以将
StackTrace
异常对象字符串的属性记录到跟踪日志中,如其他帖子所示。出于许多原因,我不想附加到我的生产环境中。很抱歉,我错过了这是一个生产环境。您现在唯一的方法就是使用WinDbg…出于一些原因,我不想连接到我的生产环境。对不起,我错过了这是一个生产环境。您现在唯一的方法是使用WinDbg…如果使用SP 2007,我将如何写入跟踪日志WriteTrace
似乎只适用于SP 2010…它工作得非常好。无论如何,我讨厌尝试读取SP日志。如果使用SP 2007,我将如何写入跟踪日志WriteTrace
似乎只适用于SP 2010…它工作得非常好。无论如何,我讨厌尝试阅读SP日志。