2016-03-31 12 views
0

まず、core perlを使用してファイルを書く人を学ぶために、以下の記事を読んでください。Perl:core perlツールを使用してログファイル内の行を消去する

からhttp://perlmaven.com/writing-to-files-with-perl

からhttp://perlmaven.com/appending-to-files

私は疑問を持っています。私の場合、私はログファイルを書く必要がありますが、軽いログでなければなりません。例えば、50行のテキストを意味します。

すべての対話が必要なので、最初の行を消去してログの最下部に書き込んでください。

これを実行するために使用するパラメータは何ですか?

私の考えは、ログのすべてのデータを取得し、配列のような変数を入れて、最初の値を削除してから、open(FILEHANDLE,">filename");を使ってログを書き直します。

コアツールのみを使用してこのジョブを作成するperlメソッドはありませんか?

ありがとうございました。

+2

これは、通常、「ログローテーション」によって処理されます。オンラインで検索してください。問題にはかなりのアプローチがあります(特定のファイルサイズに達したときに新しいログを作成するか、毎時新しいログを作成するなど)。 Perlモジュール、Log4perlもありますが、標準的なディストリビューションには含まれていないと思います。 – sferencik

答えて

1

これは非常に効率的です。なぜなら、これを行うための唯一の方法は、最初の行を減らしてログファイルを書き換えることだからです。

これがすべての場合は、tail +2がこのトリックを行います。

しかし、私はそれに行を追加するたびにログファイルを書き直すのは非常に非効率的で、何をするのが良いかは、代わりに複数の書き込みと古いものを削除することを提案したい。あなたではなく、ファイルの内容を読み取るために持つよりも、メタデータを読んでいるよう

例えば:

  • statファイルは、サイズを取得します。
  • サイズが所定の制限(50行×80文字の幅は4000バイト)より大きい場合は、新しいファイルを開きます。
  • 残りのファイルを一覧表示し、「古い」ファイルがあれば削除します。 (常に「現在」と「前」を保持し、常に4000〜8000バイトの「ログ」を持ちます)

ログファイルを書き直すことはできません。そうした場合、ログが空/長さゼロの短い期間が存在することに注意してください。また、ログにtail -fを実行することもできません。

関連する問題