12

Windows では、どこにエラー ログ ファイルを書き込みますErrorLog.txtか? ファイルの書き込み権限のために、パスは基本ユーザーに開かれている必要があることに注意してください。

イベントログがエラーを書き込む可能性のある場所であることは知っていますが、「ユーザー」レベルの権限で機能しますか?

編集: 私は Windows 2003 をターゲットにしていますが、エラー ログをどこに書き込むかについての「一般的なガイドライン」を持つような方法で質問を投げかけていました。
EventLog に関しては、Windows イベント ログにログを記録したい ASP.NET アプリケーションで以前に問題が発生したことがありますが、セキュリティ上の問題があり、心痛がありました。(私が抱えていた問題は覚えていませんが、あったことは覚えています。)

4

10 に答える 10

14

代わりにイベント ビューアをログに記録することを検討しましたか? 独自のログを書きたい場合は、ユーザーのローカル アプリ設定ディレクトリをお勧めします。その下に製品ディレクトリを作成します。これは、Windows のバージョンによって異なります。

Vista では、このようなファイルを c:\program files の下に置くことはできません。あなたはそれで多くの問題に遭遇するでしょう。

.NET では、次の方法でこのフォルダーを見つけることができます。

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

また、イベント ログも非常に簡単に使用できます。

http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx

于 2008-10-10T14:36:04.423 に答える
5

テキスト ファイルは、サーバー アプリケーションに最適です (Windows 2003 とおっしゃいました)。サーバー アプリケーションごとに個別のログ ファイルを用意する必要があります。場所は、実際には管理者と合意する慣習の問題です。たとえば、ASP.NET アプリの場合、仮想ディレクトリ構造を模倣したフォルダー構造の下で、アプリケーションとは別のディスクに配置されることがよくあります。

クライアント アプリの場合、テキスト ファイルの欠点の 1 つは、ユーザーがアプリケーションの複数のコピーを起動する可能性があることです (これを防ぐための特別な措置を講じていない場合)。そのため、複数のインスタンスが同じログ ファイルに書き込もうとすると、競合の問題が発生します。このため、クライアント アプリには常に Windows イベント ログを使用することをお勧めします。1 つの注意点は、イベント ログを作成するには管理者である必要があることです。これは、たとえばセットアップ パッケージによって行うことができます。

ファイルを使用する場合は、Environment.SpecialFolder フォルダーを使用することをお勧めします。他の人が提案した SpecialFolder.ApplicationData ではなく、ローカルのApplicationData 。LocalApplicationData はローカル ディスク上にあります。ユーザーがローミング プロファイルを使用している場合、ネットワークの問題によってログが停止されることは望ましくありません。WinForms アプリケーションの場合、Application.LocalUserAppDataPath を使用します。

どちらの場合でも、簡単に変更できるように、構成ファイルを使用してログを記録する場所を決定します。たとえば、Log4Net または同様のフレームワークを使用している場合、アプリを変更することなく、テキスト ファイル、イベント ログ、またはその両方にログを記録するか、他の場所 (データベースなど) にログを記録するかを簡単に構成できます。

于 2008-10-11T11:49:16.977 に答える
3

標準の場所は次のとおりです。

C:\Documents and Settings\All Users\Application Data\MyApp

また

C:\Documents and Settings\%Username%\Application Data\MyApp

(別名)ユーザーレベルの許可要件%UserProfile%\Application Data\MyAppに一致します。また、異なるユーザーによって作成されたログを分離します。

.NETランタイムを使用すると、これらは次のように構築できます。

AppDir=
  System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

また

AppDir=
  System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

に続く:

MyAppDir = IO.Path.Combine(AppDir,'MyApp')

(うまくいけば、Vistaプロファイルもマップされます)。

于 2008-10-10T14:43:42.460 に答える
3

個人的には、Windows イベント ログを使用することをお勧めします。これは素晴らしいことです。できない場合は、ファイルを ApplicationData ディレクトリまたは ProgramData (Windows XP のすべてのユーザーのアプリケーション データ) ディレクトリに書き込みます。

于 2008-10-10T14:36:31.507 に答える
2

Windows イベント ログは、間違いなくエラーのログ記録に適した方法です。新しいログ ターゲット (「マイ アプリケーション」など) を作成できるため、「アプリケーション」ログに限定されません。管理者権限が必要かどうかわからないので、セットアップの一部として行う必要があるかもしれません。http://support.microsoft.com/kb/307024に C# の Microsoft の例があります。

Windows 2008 には、サーバー アプリケーションで非常に便利なイベント ログ転送機能もあります。

于 2008-10-10T14:44:10.460 に答える
1

これについてはルーに同意しますが、ジョーが言ったように構成ファイルでこれを設定することを好みます。使用できます

ファイル値="${APPDATA}/Test/log-file.txt"

("Test" は任意のものにすることも、完全に削除することもできます) 構成ファイルで、ログ ファイルが Windows XP では "/Documents and Settings/LoginUser/Application Data/Test" に、"/Users/ Windows Vista での LoginUser/AppData/Roaming/Test。

Windows Vistaでこれを機能させる方法を考え出すのにあまりにも多くの時間を費やしたので、これを追加しています...

これは、Windows アプリケーションでそのまま機能します。Web アプリケーションでログを使用するには、Phil Haack のブログ エントリが優れたリソースであることがわかりました: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

于 2008-10-19T00:10:28.703 に答える
0

%TEMP% は、私が見つけたログの保存場所として常に適しています。

于 2008-10-10T14:34:58.733 に答える
0

ここで穀物に逆らう - それはあなたが何をする必要があるかによって異なります。場合によっては結果を操作する必要があるため、log.txt が適しています。シンプルで変更可能で、検索も簡単です。

ジョエルの例を見てみましょう。Fogbugz は、http 経由でサーバーにログ/エラー メッセージのダンプを送信します。同じことを行うことができ、ドライブに対するユーザーのアクセス権について心配する必要はありません。

于 2008-10-11T11:24:43.313 に答える
0

個人的には、運用サーバーにアクセスできないため、現在の場所で Windows イベント ログを使用するのは好きではありません。つまり、エラーを確認するたびにアクセスを要求する必要があるということです。残念ながら迅速なプロセスではないため、トラブルシューティングは他の誰かを待つことで完全に中断されます. また、他のアプリケーションからのものの中で迷子になるのも好きではありません。確かに並べ替えることができますが、下にスクロールするのはちょっとしたことです。使用するものは、個人の好みと、作業している環境の制限の組み合わせになります。 (ログ ファイル、イベント ログ、またはデータベース)

于 2010-12-22T15:48:34.797 に答える
-4

アプリケーションのディレクトリに配置します。ユーザーは、アプリケーションを実行して実行するためにフォルダーへのアクセスが必要になります。また、アプリケーションの起動時に書き込みアクセスを確認できます。

イベント ログをトラブルシューティングに使用するのは面倒ですが、それでも重大なエラーを記録する必要があります。

編集 - .NET を使用している場合は、ロギングのために MS アプリケーション ブロックを調べる必要があります。彼らは本当に生活を楽にします。

うわー、カルマキラー。次回、投稿者が不完全な投稿をした場合、私は提案さえしません。

于 2008-10-10T14:35:47.030 に答える