4

デフォルトでは、ASP.NET はキャッチされなかったすべての例外をシステム イベント ログに記録します。適切なログ機能を用意する必要があることは承知していますが、これは何もないよりはましであり、一時的な解決策として役立ちます。

ログ内のイベントを効率的にフィルタリングできるようにしたいと考えています。プログラムでログを記録するときに、次の方法でイベント ログの [ソース] 列にカスタム値を設定できることを知りました。

EventLog eventLog = new EventLog("Application");
eventLog.Source = "My custom name";
eventLog.WriteEntry("Some error description ...", EventLogEntryType.Error);

ただし、ASP.NET は、この値を "ASP.NET" に続けてバージョンを設定します。web.config のドキュメントを簡単に確認しましたが、明確な変更箇所が見つかりませんでした。そもそも変えられるのかしら。

4

3 に答える 3

2

最善の策は、ソース プロパティを意図したとおりに使用することですが、インストーラーでインストーラー クラスを使用して、インストール時に (管理者の下で) レジストリをセットアップします。

システムを使用する;
System.Collections を使用します。
System.Collections.Generic の使用;
System.ComponentModel の使用;
System.Configuration.Install を使用します。
System.Diagnostics を使用します。

名前空間 InstallerClasses
{
    [RunInstaller(真)]
    public partial class EventLog : インストーラー
    {
        プライベート EventLogInstaller eventLogInstaller;

        ///
        /// MyApp のイベント ログを作成します
        ///
        public EventLog()
        {
            InitializeComponent();

            // EventLogInstaller のインスタンスを作成します。
            eventLogInstaller = 新しい EventLogInstaller();

            // イベント ログのソース名を設定します。
            eventLogInstaller.Source = "MySource";

            // ソースがエントリを書き込むイベント ログを設定します。
            eventLogInstaller.Log = "アプリケーション";

            // myEventLogInstaller を Installer コレクションに追加します。
            Installers.Add(eventLogInstaller);
        }
    }
}

また、インストーラーでカスタム アクションとして実行されることを確認してください。

于 2009-02-02T00:46:12.920 に答える
1

source プロパティを使用するのはあまり良い考えではないようです。もともと、自由形式のテキストだと思っていました。しかし、RegisterEventSource(...) Win32 API 関数を介して登録する必要があることがわかりました。これは、アプリケーションが管理者権限で実行されている場合にのみ機能するようです。.NET は自動的に新しいソースを作成しますが、管理者でない場合は例外がスローされます。したがって、全体として、ASP.NET 内でアドホック ソース名を使用するには、事前登録が必要になる場合があります。これにより、展開に別の手順が導入されます。

于 2009-02-01T16:38:20.503 に答える
0

global.asax でキャッチされていない例外を処理し、次のようにプログラムで例外をログに記録することができます。

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError().GetBaseException();
    // logging code here
}
于 2009-01-31T21:56:18.007 に答える