如何在SharePoint日志中获取更多信息?

如何在SharePoint日志中获取更多信息?,sharepoint,logging,Sharepoint,Logging,我在生产环境中安装了一个功能,但现在它抛出以下错误: 作业定义的执行方法 SharePointSocialNetworking.Facebook (ID) 528d61e4-95b6-4766-bb98-4363da570506) 抛出了一个异常。更多信息 包括在下面。对象引用 未设置为对象的实例 异常堆栈跟踪:在 SharePointSocialNetworking.Facebook.Execute(Guid targetInstanceId)在 Microsoft.SharePoint.Ad

我在生产环境中安装了一个功能,但现在它抛出以下错误:

作业定义的执行方法 SharePointSocialNetworking.Facebook (ID) 528d61e4-95b6-4766-bb98-4363da570506) 抛出了一个异常。更多信息 包括在下面。对象引用 未设置为对象的实例

异常堆栈跟踪:在 SharePointSocialNetworking.Facebook.Execute(Guid targetInstanceId)在 Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobexedData& 数据、Int32和结果)

我的问题是堆栈跟踪在变得有用时停止。。。我需要知道它在Execute方法中的什么地方出错(甚至可能是一个行号)。他们只是给了我足够的信息,让我大致了解问题是什么,而不是问题发生在哪里

是否有任何地方可以获取完整的堆栈跟踪,或准确跟踪“对象引用未设置为对象实例”的位置。是否发生错误

在“管理中心”的“诊断日志”部分中,我将“最不关键的事件甚至报告到事件日志”设置为“错误”,将“最不关键的事件报告到跟踪日志”设置为“详细”


这是用于计时器作业的。

因为您的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日志。