さまざまなソース(チャットルームやプライベートチャット)からメッセージを受信しているアプリケーションがあります。アプリケーションの複数のインスタンスを開くことができ、最終的な結果は次のシナリオのようなものでなければなりません:現在チャットログ管理、パフォーマンス別
、各アプリケーションは、名前がログオンに使用したアカウントであるディレクトリにログを保存しますチャットサーバー。プライベートチャットソース(各アプリケーションインスタンスに固有の問題)では問題ではありませんが、共通のチャットルームに関する同じログを複数回保存するのは無駄です。ログはプレーンテキスト形式で保存されるため、アプリケーションを経由せずにアクセスして読み取ることができます。
ログを別々のフォルダに保存しないと、複数のプロセスから同時に同じファイルにアクセスするためI/O例外が発生する可能性があります。保存しようとしている行が 'すでに他のアプリケーションによって作成されています。私は操作全体を最適化し、コードの可読性を維持しようとする必要があります。
はまた、ラインを書くための私の現在のアプローチは以下の通りです:
ログが常に書かれていることを考慮すると、最も効率的な解決策ではないかもしれない、public void Write(string message)
{
using (var writer = new StreamWriter(_fileName, File.Exists(_fileName)))
writer.WriteLine(message);
}
。まとめ
、私の質問は以下のとおりです。
- は、どのように私は彼らの形式(プレーンテキスト)を維持したが、前述の重複/アクセスの問題を解決し、独自のログフォルダ/データベースを作成するのですか?
- 可能であれば、書き込み方法を改善するにはどうすればよいですか?ログは常に書き込まれる必要があることを覚えておいてください。アプリケーションが終了すると
StreamWriter
を閉じることは、アプリケーションが長期間実行されるため、適切な解決策にはなりません。
ありがとうございます。
なぜあなたは、このようなlog4netのようロギングフレームワークを使用していませんか? –
@AaronMcIver:それは公正な点ですが、重複しないデータを1つのファイルに書き込む複数のインスタンスを回避するのに役立つことはありません。 – R0MANARMY
あなたのスケッチは、チャットルーム1からの重複ログはログリポジトリでのみ重複とみなされることを示唆しています。それは事実ですか?はいの場合、2つの結合されていないアプリインスタンスで重複除外することはできません。 –