How can I get more information into my SharePoint logs?
I installed a feature to my production environment but now it is throwing the following error:
The Execute method of job definition SharePointSocialNetworking.Facebook (ID 528d61e4-95b6-4766-bb98-4363da570506) threw an exception. More information is included below. Object reference not set to an instance of an object.
Exception stack trace: at SharePointSocialNetworking.Facebook.Execute(Guid targetInstanceId) at Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobExecuteData& data, Int32& result)
My problem is that my stack trace stops just as it's getting useful... I need to know WHERE in the Execute method it is erroring out (maybe even a line number). They are just giving me enough info to have a general idea of what the problem is but not where it is happening...
Is there anywhere to get a FULL stack trace or to track down exactly where my "Object reference not set to an instance of an object." error is occurring?
In my "Diagnostic Logging" section in t开发者_JS百科he central admin I have "Least critical even to report to the event log" set to "Error" and "Least critical event to report to the trace log" set to "Verbose".
This is for a timer-job.
Because your pdbs dont get packaged and deployed, you cant get line numbers from your exceptions
How can I include line numbers in a stack trace without a pdb?
But i get around it by building a 'message' as a process happens, you know where the error occurs because of the value in the 'message'.
All my sharepoint jobs are structured similar to this:
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);
}
}
This allows me to trace most errors fairly accurately in development and production
EDIT
There are ways to write to the trace logs in 2007 (more complicated sure)
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
But i just wrote straight to the event log:
EventLog el1 = new EventLog();
el1.Source = "My Custom Source";
el1.WriteEntry(message, EventLogEntryType.Information);
If its your custom timer job, Why don't you debug it interactively by attaching to owstimer.exe. See debugging timer jobs:
http://msdn.microsoft.com/en-us/library/ff798310.aspx
Regarding your trace question, you can log StackTrace
property of Exception
object string to the Trace log as indicated by other posts.
精彩评论