IIS 7で実行されているASP.Net 3.5では、これをそのまま使用することはできません。
if (!EventLog.SourceExists("MyAppLog"))
EventLog.CreateEventSource("MyAppLog", "Application");
EventLog myLog = new EventLog();
myLog.Source = "MyAppLog";
myLog.WriteEntry("Message");
これは、Windows 2003以降のWindowsセキュリティの一部です。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Applicationの下のレジストリにエントリを作成する必要があります。ネットワークサービスまたは偽装するアカウントがこのレジストリキーへのアクセス許可を持っていることを確認してください。
@CheGueVerraのリンク: 要求されたレジストリアクセスは許可されていません
私はこの回答を here からコピーしました(質問はLog4Netでしたが、回答はまだ適用されます)。 technetリンクは重要な一歩を見逃しています。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MY-AWESOME-APP
EventMessageFile
という名前を付け、その値を
C:\ Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
そのパスは、64ビット環境と32ビット環境の両方で機能するようです。
この手法を使用すると、レジストリにアクセス許可を設定する必要はありません。上記のキーが作成されると、機能するはずです。
または
大きなサーバーファームがなく、小さな "Webガーデン"しかない場合は、各サーバーでコンソールアプリケーションを実行して、イベントログソースを作成します EventLog.CreateEventSource
、コンソールアプリケーションが管理者によって実行されていることを確認してください。
アプリケーションを右クリックして、「管理者として実行」を選択します