9

キオスク (C#/WPF) のスタンドアロン パネル PC でアプリケーションを実行しています。これは、テキスト ファイルへのいくつかの典型的なログ操作を実行します。PC には、ログが大きくなるにつれてこれらのログを保存するための限られた量のディスク容量があります。

私がしなければならないことは、ログ ファイルの許容最大サイズを指定できるようにすることです。ログに書き込もうとしたときに最大サイズを超えた場合、新しいデータがログの最後に書き込まれ、最も古いデータが最初から削除されます。

ファイルサイズを取得することは問題ありませんが、ファイルを特定のサイズ以下に保つための典型的なファイル操作テクニックはありますか?

4

6 に答える 6

16

これを処理する 1 つの手法は、それぞれ最大サイズの半分の 2 つのログ ファイルを用意することです。各ファイルの最大サイズに達すると、単純に 2 つの間をローテーションします。ファイルをローテーションすると、新しいファイルで上書きされます。

log4net などのロギング フレームワークには、この機能が組み込まれています。

于 2011-01-19T21:40:50.873 に答える
5

Log4Netを使用してみてください

http://www.codeproject.com/KB/aspnet/log4net.aspx

于 2011-01-19T21:44:35.443 に答える
4

ファイルの先頭からデータを削除する簡単な方法はありません。したがって、いくつかのオプションがあります。

  1. ログをいくつかの小さなログ ファイルに保存し、すべてのログ ファイルの合計サイズが制限を超える場合は、最も古い「チャンク」を削除します。これはやりたいことと似ていますが、レベルが異なります
  2. ログ ファイルの名前を「log.date」に変更し、新しいログを開始します。(1) と同様ですが、ディスク容量が限られている場合はオプションではありません。
  3. 十分な RAM があり、ログ サイズがメモリに収まるほど小さい場合は、次の操作を実行できます。メモリ マップ ファイルを使用してファイル全体をメモリにマップし、ファイルの途中からデータを取得して移動操作を実行し、それらを最初に移動します。次に、ファイルを切り捨てます。これは、ログ ファイルのコピーを作成せずに、ログ ファイルの先頭からデータを簡単に取り除く唯一の方法です。
于 2011-01-19T21:41:18.030 に答える
2

Linux OS:logrotateをチェックしてください-http: //www.cyberciti.biz/faq/how-do-i-rotate-log-files/

Windows OS:グーグルウィンドウのログローテーションを試してください。例: http: //blog.arithm.com/2008/02/07/windows-log-file-rotation/

于 2011-01-19T21:42:54.923 に答える