2

vb.net で簡単なアプリケーションを作成しており、診断目的でログ ファイルに情報を出力する必要があります。

ログ ファイルが大きくなりすぎないようにするために、特定の行数 (たとえば 5000 行) にトリミングする必要があります。パフォーマンス上の理由から、ログ エントリが書き出されるたびにトリミングを実行する必要はなく、トリミングの実行が重要であるわけでもありません (たとえば、アプリケーションが早期にクラッシュした場合)。

しかし、それをトリミングする最良の方法は本当にわかりません。ログ全体をメモリにロードしてから、最後の 5000 行だけを書き直すこともできますが、これを行うためのよりクリーンで優れた方法があると確信しています。

誰でもより効率的な方法を提案できますか? 私は vb.net でかなり新しいので、コード例をいただければ幸いです。

4

4 に答える 4

4

すでに書き込んだデータの変更について心配するのではなく、現在のログファイルが特定のサイズに達したとき、またはスケジュールに基づいて(1時間ごとに)、特定の時点で新しいログファイルを開始するという昔ながらの伝統に従います。毎日またはその他)。

現在のログファイルの名前をからxyzzy.logに変更してからxxyyz-YYYYMMDDHHMMSS.log、の新しいコピーを開始しますxyzzy.log

これにより、ログの完全な監査を維持することとディスク領域を維持することの間の適切なトレードオフも得られます。30日以上経過したログファイルを削除する手順を設定したり、集計サイズをあるしきい値未満に維持したり、古いログをセカンダリストレージ領域に隠したりすることもできます。

これらの手順は、プログラムの一部である必要はありません。以前は、古いログファイルをクリーンアップするスケジュールされたタスクがありました。このタスクは、スクリプトが配置されているディレクトリ以外は、プログラム自体とは何も共有していませんでした。住んでいた。

これは、サードパーティ製品を統合する以外の方法でおそらく最も簡単な方法です(常に可能であるとは限りません)。ログファイルはほとんどの場合、ユーザーではなくプログラマー向けであるため、命名基準はそれほど面倒ではありません。 。


私が過去に(確かにLinuxで)使用した非常に単純な解決策は、実際には名前の変更についてまったく心配しないことです。ログ機能で現在の日付を使用してファイルを開き、日付を覚えておくだけです。その後、ログ関数を呼び出すたびに、日付が変わっていないか確認し、変更されている場合は、その後のログ記録のために新しいログファイルを開きます。これにより、プログラムによる労力をほとんどかけずに、1日に1つのログファイルが得られます。

find -mtimeそれから私はちょうど特定の年齢以上のものを削除するために使用するスクリプトを持っていました。

于 2010-10-29T12:03:15.280 に答える
0

サードパーティのライブラリを使用してみてください。そのほとんどには、この種の機能が含まれている必要があります。たとえば、 log4netNLogEnterpriseLibraryなどです。

それらのほとんどは簡単に使用できます。実行しているロギングの量にもよりますが、このような機能を自分で作成するよりも、これらのいずれかを使用する方がおそらく速く、信頼性が高く、十分にテストされており、他の便利な機能も提供します。

編集

私の主な経験はエンタープライズライブラリで、@ paxdiabloが彼の回答で説明している手法を常に使用し、x日/週/Kb/などごとに新しいログファイルを開始しました。単一のファイルを特定のサイズに切り捨てることについてはよくわかりませんが、これらのライブラリでこれが可能だと思います。

于 2010-10-29T12:03:40.403 に答える
0

1つのアプローチは、このためにオープンソースソリューションを活用することです。Log4Netは、私の仲間の多くが何度も何度も使用しているものです。それはあなたが話していることを処理する機能を持っています。参照を追加し、構成ファイルを追加してログオプション(保持する量など)を設定し、ライブラリを呼び出してログを記録します。

http://logging.apache.org/log4net/

于 2010-10-29T12:03:42.050 に答える