42

Application_Start でスレッドを生成し、例外をログに記録したいと考えています。がないContext/HttpContext/HttpContext.Currentので、どうすればログに記録できますか?

現時点では、スレッドで例外をキャッチしません。書き込むErrorSignal.FromCurrentContext().Raise(ex);と、コンテキストを null にできないというエラーが表示されます。

ダミーの HttpContext を作成できるかもしれませんが、どういうわけかうまくいかないと思います。

-編集-試してみErrorSignal.Get(new HttpApplication()).Raise(ex);ましたが、その例外を拾っていないようです。

4

4 に答える 4

73

アプリケーション名を web.config に設定していることを確認してください

<errorLog type="Elmah.SqlErrorLog, Elmah" 
          connectionStringName="nibWeb" 
          applicationName="Nib.Services" />

その後

ErrorLog.GetDefault(null).Log(new Error(error));

動作します

于 2010-02-04T00:39:26.863 に答える
2

<errorLog>私はメモリ内のロギングのみを行っていたため、BrendanCareyの回答のように使用していませんでした。それにもかかわらず、私の場合、アプリケーションに名前を付けなくても、彼のコマンドはうまく機能しました。

Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something.")));

System.Web.Abstractions 3.5.0.0の必要性に関するエラーのため、Elmahを.NET4.0で再コンパイルする必要がありました。私のcompiled-for-.NET4.0フォークは、誰かがそれを望むならここにあります(また強い名前付け):

http://code.google.com/r/scottstafford-elmah/

于 2012-05-08T13:45:24.963 に答える
1

私のアプリケーションでは、保存したインスタンスで呼び出すことができるように保存this.Context.ApplicationInstanceしました。で、できました。これは、すべての電子メール フィルターを通過します。Application_StartElmah.ErrorSignal.GetErrorSignalRaise

以下はコードです。FluentScheduler を使用して

public class Global : HttpApplication {
    void Application_Start(object sender, EventArgs e) {

        var application = Context.ApplicationInstance;
        FluentScheduler.TaskManager.UnobservedTaskException +=
            (FluentScheduler.Model.TaskExceptionInformation i, UnhandledExceptionEventArgs a) =>
                Elmah.ErrorSignal.Get(application).Raise(i.Task.Exception);

    }
}
于 2014-09-17T19:27:40.887 に答える
0

次のソリューションを追加しました:コンソール アプリケーションで ELMAH を使用して、ログに加えて電子メール、ツイート、およびフィルターを送信する機能を追加します。

于 2010-03-22T15:14:47.513 に答える