2012-05-01 7 views
0

ASP .NETアプリケーションからアプリケーションイベントログにログします。 EventLog.SourceExistsを呼び出して、イベントソースが最初に存在するかどうかを判断し、イベントソースが作成されていないかどうかを確認します。 MSDN(http://msdn.microsoft.com/en-us/library/6s7642se.aspx)に文書化されたようEventLog.SourceExistsを呼び出す前にEventLogのアクセス許可を検出します。

: 「Windows Vistaのイベントソース以降またはWindows Server 2003を検索するには、あなた この要件を満たすのは、イベントソースが一意であるかどうかを判断するために、セキュリティを含むすべてのイベントログを検索する必要があるためです.Windows Vista以降、ユーザーはセキュリティログにアクセスする権限がないため、 "

私の場合のNetworkServiceユーザーには管理者権限がないため、EventLog.SourceExistsはMSDNに記載されているようにSecurityExceptionをスローします。

私の質問はです。どうすればEventLog.SourceExistsの呼び出しを防御的にコーディングできますか? EventLog.SourceExistsを呼び出す前にイベントソースを検索する権限があるかどうかを最初に確認するための呼び出しがありますか?

また、SecurityExceptionをキャッチしてキャッチブロック内で他の処理を行う唯一の方法です。既存のイベントソースにログインする。情報

ケビン

答えて

0

おかげで、あなたは絶対に、Windowsのアプリケーションイベントログに書き込む必要がありますか?既定で設定されているセキュリティの制限により、これを行うのが難しくなります。新しいVMで開発するたびに、NETWORK_USERアカウントでログに書き込めるようにするため、アプリケーションをライブサーバーにロールオーバーするとすぐに(卸売りレジストリの変更はおそらくない良いアイデアを)あなたはスヌーカーされています。

また、Windowsのイベントログは、ロギング/デバッグのための最もフレンドリーな環境ではないことを教えてくれました。私が翌日に読むことができるhtmlファイルにすべてのイベントロギングを行う傾向があります。私はカスタムデータベースを使用し、その代わりにすべてのイベントを送信します。

+0

いいえイベントログを使用する必要はありません。私の会社はロギングライブラリを公開しています。アプリケーション開発中にアプリケーションがこのライブラリを使用してテスト用にイベントログを使用することができれば、この時点でログDB設定がない可能性があると仮定します。プロダクションでは、アプリケーションは決してイベントログを使用すべきではなく、常にDBにログするべきです。ただし、アプリケーションの中には、開発中にテストサーバーにコードを展開したり、ローカルマシンと同じアクセス許可を制御しないため、イベントログへのロギングが停止するものがあります。 –

+0

私は基本的にこれを回避するか、ロギングライブラリでカスタムイベントソースを作成しようとするのではなく、単に "情報"イベントソースにログするようにしてください。 –

+0

あなたは大歓迎です。私の(確かに限られた)知識を共有して幸せです(投票がうまくいくでしょう)。イベントログに確実にログする必要がある場合は、カスタムイベントログを作成してログに記録することをお勧めします。メインのアプリケーションイベントログは使用しないでください。しかし、あなたが言っているように、テストサーバーにデプロイすると、セキュリティはアプリケーションのログを止めるので、私は他のソリューション(上記で説明した)を探索します。 – markp3rry

関連する問題