プログラムでエルマにアプリケーション名を設定する方法はありますか?
質問
Visual Studioで使用している構成に基づいて、アプリ名を変更する必要があります。たとえば、デバッグ構成にいる場合、アプリ名をElmah_Errorテーブルの[アプリケーション]フィールドに「App_Debug」として表示する必要があります。誰もこれを経験したことがありますか?または、別の方法がありますか?
解決
デフォルトでは、ElmahはAppPoolのアプリケーションGUIDをデフォルトのアプリケーション名として使用します。 HTTPモジュールを介して作成されたWebインターフェースを見たときに、これをElmah_Errorテーブルのエラーを識別するキーとして使用します。
私は今年の初めに、このオプションを自分の会社で検討することを任されました。 ElmahはErrorLog.csファイルのHttpRuntime.AppDomainAppId
からアプリケーション名を取得するため、これをデフォルトで操作する方法を見つけることができませんでした。任意のキーで操作できます。ただし、それはAppPoolのGUIDです。
それでは、ErrorLog.csファイルを操作して、Elmahをハンドラーベースのフレームワークではなく呼び出し可能なフレームワークに変換し、ApplicationNameを設定することができました。私がやったことは、ErrorLog.csを変更して、次のように名前を設定できるプロパティを含めることでした。
public virtual string ApplicationName
{
get
{
if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; }
return _applicationName;
}
set { _applicationName = value; }
}
おそらく必要なことは、これを異なる方法で調整し、ApplicationNameをErrorLog.Log(ex)
ではなく、web.configから取得した値に設定することです。全体として、それは可能です。私が行った方法は<=>メソッドを強化し、Elmahを使用できるようにしました。Webアプリケーションを超えて呼び出し可能なフレームワークがあります。振り返ってみると、代わりにapp / web.configアプローチをしたいと思います。
Elmahでアプリケーション名を変更する際に留意すべき点が1つあります。 /elmah/default.aspxインターフェイスを生成するhttpハンドラーは機能しなくなります。私はまだそのようなものに戻る時間を見つけようとしています。ただし、実装時にカスタムインターフェイスの作成を検討する必要がある場合があります。
他のヒント
これは純粋にマークアップで行うことができます。 web.configファイルのapplicationName
セクションのerrorLog
要素に<elmah>
属性を追加するだけです。例:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
これをテストしましたが、例外を記録するときとElmah.axd
を介してログを表示するときの両方で機能します。
OPの場合、プログラムで設定することもできますが、私はそれをテストしませんでした。私と私にとって、ほとんどのシナリオではマークアップのアプローチで十分だと思います。