2011-01-12 21 views
1

私は私の本番環境への機能をインストールしたが、今では、次のエラーを投げている:私の問題は私のスタックトレースは、それが便利になっていますと同じように停止することであるSharePointログに情報を追加するにはどうすればよいですか?

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)

...私はには、実行WHERE知っている必要がありますそれはエラーになります(おそらく行番号)。彼らは私に、問題が何であるかという一般的な考えを得るのに十分な情報を与えています...

どこでもFULLスタックトレースを取得したり、オブジェクトのインスタンスに設定します。エラーが発生していますか?

中央管理の私の「診断ログ」セクションには、「イベントログに報告するのにも最低限必要」が「エラー」に設定されており、「トレースログに報告する重要な最小イベント」が「詳細」 。

これはタイマージョブ用です。

答えて

1

あなたPDBSをパッケージ化して展開しますいけないので、あなたの例外から

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

を行番号を取得するカントしかし、プロセスが起こるように私はあなたがどこを知って、「メッセージ」を構築することにより、それを回避します'message'の値のためにエラーが発生します。

すべての私の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); 
    } 
} 

これは私が

EDIT

を書くための方法があり、開発と生産にかなり正確にほとんどのエラーをトレースすることができます2007年のトレースログへ(より複雑になる)

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

http://msdn.microsoft.com/en-us/library/aa979522%28v=office.12%29.aspxは、しかし、私はちょうどイベントログにストレートに書いた:

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

SP 2007を使用している場合、どのようにトレースログに書き込むのですか? 'WriteTrace'はSP 2010でのみ利用可能です... –

+0

これは完璧に機能しました。とにかくSPのログを読もうとするのは嫌いです。 –

0

そのカスタムタイマージョブは、なぜあなたはに取り付けることによって、対話的にそれをデバッグしていない場合owstimer.exe。タイマジョブのデバッグを参照してください。

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

あなたのトレース質問については、他の記事で示したように、あなたがトレースログにExceptionオブジェクトの文字列のStackTraceプロパティをログに記録することができます。

+0

私はいくつかの理由で私の生産環境に添付したくないでしょう。 –

+0

申し訳ありませんが、私はその生産を見逃しました。あなたのための唯一の方法は今WinDbgを使用することです... –

関連する問題