2011-01-12 10 views
1

habe ich eine Funktion, um meine Produktionsumgebung aber jetzt ist es die folgenden Fehler zu werfen:Wie kann ich mehr Informationen in meine SharePoint-Logs bekommen?

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)

Mein Problem ist, dass mein Stack-Trace hält nur wie es ist immer nützlich ... ich wissen muß, wo in der Execute Methode es ist ein Fehler (vielleicht sogar eine Zeilennummer). Sie geben mir nur genug Informationen, um eine allgemeine Vorstellung davon zu haben, was das Problem ist, aber nicht, wo es passiert ...

Gibt es irgendwo einen vollen Stack Trace zu bekommen oder genau dort nach zu suchen, wo mein "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt. " Fehler tritt auf?

In meinem "Diagnostic Logging" -Abschnitt im zentralen Admin habe ich "Am wenigsten kritisch, sogar um in das Ereignisprotokoll zu melden" auf "Fehler" und "Wenigste kritische Ereignisse in das Trace-Protokoll" auf "Ausführlich" gesetzt .

Dies ist für einen Timer-Job.

Antwort

1

Weil Ihre PDBS dont get verpackt und eingesetzt, man kann die Zeilennummern von Ihrer Ausnahme

How can I include line numbers in a stack trace without a pdb?

Aber ich bekomme bekommen um sie durch eine ‚Botschaft‘ Gebäude als Prozess geschieht, wissen Sie, wo die Fehler tritt aufgrund des Werts in der "Nachricht" auf.

Alle meine Sharepoint-Jobs sind ähnlich wie folgt strukturiert:

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); 
    } 
} 

Dies ermöglicht es mir, die meisten Fehler ziemlich genau in der Entwicklung und Produktion

EDIT

Es gibt Möglichkeiten zu verfolgen, zu schreiben zu den Ablaufverfolgungsprotokollen im Jahr 2007 (komplizierter sicher)

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

Aber ich gerade geschrieben habe gerade in das Ereignisprotokoll:

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

Wie würde ich in das Ablaufverfolgungsprotokoll schreiben, wenn ich SP 2007 verwende? 'WriteTrace' scheint nur für SP 2010 verfügbar zu sein ... –

+0

Das hat perfekt funktioniert. Ich hasse es, die SP-Logs sowieso zu lesen. –

0

Wenn seine Ihre benutzerdefinierten Zeitgeberauftrag, Warum nicht Sie es interaktiv debuggen, indem es an owstimer.exe. Siehe Debug-Timer-Aufträge:

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

In Bezug auf Ihrer Spur Frage, Sie StackTrace Eigenschaft Exception Objekt String in der Trace-Log von anderen Stellen als angegeben anmelden kann.

+0

Ich möchte mich aus verschiedenen Gründen nicht an meine Produktionsumgebung binden. –

+0

Sorry, ich habe verpasst, dass es eine Produktion ist. Der einzige Weg für Sie ist jetzt, WinDbg zu verwenden ... –

Verwandte Themen