8

elmah を使用して、asp.net Web API プロジェクトから例外をログに記録しようとしています。各エラーが 2 回ログに記録されるという問題があります。

私は Elmah.Contrib.Web-Api を使用しており、Application クラスは次のとおりです。

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);

#if DEBUG
        EntityFrameworkProfiler.Initialize();
#endif

        GlobalConfig.CustomizeConfig(GlobalConfiguration.Configuration);

    }
}

次の行をコメントアウトすると、メッセージはまったく表示されません。

GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

また、エラーを 1 つだけスローしていること、エラーを生成する呼び出しが 1 回しか呼び出されていないこと、コントローラーまたはメソッドを Elmah 属性で手動で装飾していないことを確認できます。

これを解決するために、Contrib パッケージを削除し、ここにある指示に従って追加しましたhttp://www.tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration

これで問題は解決せず、依然として 2 回ログに記録されます。Attribute クラスにブレーク ポイントを設定し、エラーごとに 2 回呼び出されていることを確認できました。

どうすればこれを解決できますか?

4

6 に答える 6

4

web.config にはどのような ELMAH 関連のエントリがありますか?

MVC アプリケーションで同様の問題が発生しました。処理された例外が 2 回ログに記録されていました。アプリケーションでは、カスタム例外フィルターを使用して、処理された例外をエラー シグナルを使用して ELMAH に記録し、HTTP モジュールが未処理の例外を処理します。

設定する必要があることが判明しました:

<add key="elmah.mvc.disableHandleErrorFilter" value="true" />

ELMAH.MVC NuGet パッケージ内の組み込みの例外フィルターを無効にするために、web.config で。

組み込みフィルターのソース コードは、処理された例外をログに記録することを示してい ます。

于 2013-05-28T14:33:23.853 に答える
3

FilterConfig.cs クラスを確認します。デフォルトの HandleErrorAttribute がそこに追加され、例外が再スローされている可能性がありますか?

于 2013-03-14T09:49:21.987 に答える
3

価値があるのは、Web API アプリケーション (Elmah.Contrib.WebApi を使用) で ELMAH が各例外を 2 回ログに記録するという同じ問題を抱えていたことです。

ELMAH メールをソース履歴と比較すると、Ninject.Web.WebApi 3.0.2-unstable-9016 パッケージが nuget 経由でインストールされた後に問題が発生し始めたことを特定できました。

案の定、パッケージをアンインストールし、それを使用していた単一の依存関係バインディングをコメントアウトすると、二重の例外ログの問題が解決しました。パッケージを再インストールし、依存関係バインディングをコメントアウトしたままにすると、問題が再び発生したため、バインディング自体ではありませんでした。

以前のバージョン (Ninject.Web.WebApi 3.0.2-unstable-8) をインストールしても問題は発生しませんでしたが、依存関係バインディングが機能しなくなりました。

当分の間、問題と一緒に暮らすことを選択しています。

于 2013-09-11T05:24:01.960 に答える
0

ロギング 2 回の問題を抱えている他の人々の場合 (これは OP に役立つとは思いませんか?) - これは私に起こりました。その理由は、フィルターをグローバルに適用したためです。

GlobalConfiguration.Configuration.Filters.Add(new ElmahErrorAttribute()); //log web api errors

だけでなく、属性をクラスに適用しました (doh!)

[ElmahError]
public class TestController : ApiController

もちろん、2回ログインしました。

于 2014-04-24T15:55:42.250 に答える
0

この問題は HTTP401応答でのみ発生しました。問題は、ブラウザが 2 番目のネゴシエーション リクエストを作成する原因となった Windows 認証が有効になっていることであることが判明しました。

私の場合、web.config で Windows 認証を無効にすることができました。

<security>
  <authentication>
    <windowsAuthentication enabled="false" />
  </authentication>
</security>

注: 構成セクションのロックを解除していない場合は、IIS で Windows 認証を無効にすることができます。

于 2015-05-26T03:17:59.787 に答える