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

时间:2011-01-12 15:53:45

标签: sharepoint logging

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

  

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

     

异常堆栈跟踪:at   SharePointSocialNetworking.Facebook.Execute(GUID   targetInstanceId)at   Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobExecuteData&安培;   数据,Int32&结果)

我的问题是我的堆栈跟踪就像它变得有用一样停止...我需要知道它在执行方法中的错误是错误输出(甚至是行号)。他们只是给了我足够的信息来大致了解问题所在而不是它发生的地方......

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

在我的中央管理员的“诊断日志记录”部分中,我将“至关重要甚至报告到事件日志”设置为“错误”并将“报告到跟踪日志的最不重要事件”设置为“详细”。

这是一个计时器工作。

2 个答案:

答案 0 :(得分:1)

因为您的pdbs没有打包和部署,所以您无法从例外中获取行号

How can I include line numbers in a stack trace without a 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年有多种方法可以写入跟踪日志(更复杂的确定)

http://weblogs.asp.net/erobillard/archive/2008/07/31/sharepoint-trace-logs-and-the-unified-logging-service-uls.aspx

http://msdn.microsoft.com/en-us/library/aa979522%28v=office.12%29.aspx

http://weblogs.asp.net/gunnarpeipman/archive/2009/02/25/sharepoint-writing-messages-to-uls-unified-logging-system.aspx

但我直接写到了事件日志:

        EventLog el1 = new EventLog();
        el1.Source = "My Custom Source";
        el1.WriteEntry(message, EventLogEntryType.Information);

答案 1 :(得分:0)

如果是您的自定义计时器作业,为什么不通过附加到owstimer.exe以交互方式调试它。请参阅调试计时器作业:

http://msdn.microsoft.com/en-us/library/ff798310.aspx

关于跟踪问题,您可以将StackTrace对象字符串的Exception属性记录到跟踪日志中,如其他帖子所示。