2

これは、ログファイルの作成に固有です。アプリケーションを使用してサーバーに接続すると、サーバーは詳細をログファイルに書き込みます。ログファイルが特定のサイズ、たとえば1MBに達したら、LOG2.logという名前の別のファイルを作成します。

ログファイルに書き戻しているときに、ログファイルが2つ以上あるので、最新のものを取得したいと思います。そのディレクトリ内のすべてのファイルをトラバースしてファイルを取得するのは望ましくありません。これには処理時間がかかるためです。ディレクトリ内で最後に作成されたファイルまたはログファイルを取得する他の方法はありますか。

4

5 に答える 5

3

最善の策は、ログファイルをローテーションすることです。これは、Unixで通常(通常はcronを介して)行われることです。

考えられる実装の1つは、10個(またはいくつでも)の古いログファイルを保持することです。プログラムがLog.logが1MBを超えていることを検出した場合は、Log09.logをLog10.logに、Log08.logをLog09.logに、7から8に移動します。 6から7、... 2から3、次にLog.logからLog02.logへ。最後に、新しいLog.logファイルを作成し、記録を続行します。

このようにして、常にLog.logに書き込み、ファイルシステムの謎はありません。理論的には、このアプローチは、ばかげた数のログファイル(合理的に必要な数よりも多い)にスケーラブルであり、Log3023.logに書き込むよりも標準的です。さらに、現在のログがどこにあるかを常に知っているでしょう。

于 2010-12-09T07:20:05.623 に答える
1

答えは「固い」だと思います。OSは、誰かが必要とする可能性のある偶然の機会に、考えられる各ソート順のインデックスを保持しないため、繰り返して最新のものを自分で見つける必要があります。

于 2010-12-09T07:13:30.033 に答える
0

サーバーを変更できますか?その場合は、最新のログファイルの名前またはその実際の内容を含むLASTLOG.logファイルを導入する可能性があります。

そうでなければ、トニーの権利..自分自身を繰り返す以外にそれを行う実際の方法はありません。

于 2010-12-09T07:18:16.603 に答える
0

エレガントはどうですか:

ls -t | head -n 1
于 2010-12-09T07:19:45.170 に答える
0

最も効率的な方法は、特殊な関数を使用してすべてのエントリを調べることです(NTFSまたはFATは時間でインデックスを作成しないため)が、不要なものは無視してください。そのためには、FindFirstFileEx情報レベルで呼び出しますFindExInfoBasic。これは8.3の名前解決をスキップします。

于 2010-12-09T08:58:50.553 に答える