Tie-LogFile-0.1 > Tie::LogFile

名前

Tie::LogFile - 簡単なログの自動フォーマッティング

概要

  use Tie::LogFile;
  my $logfile = '/var/log/foo';
  
  tie(*LOG, 'Tie::LogFile', $logfile,
        format  => '%c (%p) [%d] %m',
        tformat => '%X %x')           or die $!;
        
  print LOG "Starting Run";
  # 何かします ...
  print LOG "Did @stuff";
  # きれいにします
  print LOG "Exiting";
  
  close(LOG) or die "Couldn't close $logfile\n";
  

説明

このモジュールはログファイルをrepetativeなフォーマットで出力する 手早く簡単な方法を提供します。多くのプロジェクトで、私は以下のようなものを 持っていました:

 sub logit {
        print $LOG scalar localtime, @_;
 }
 

これは柔軟性に欠け、ログの行がログのフォーマットに従わないようになりがちです。 Tie::LogFileモジュールはフォーマットを基本とし、 最初にファイルハンドルにtieした(本当に作成した)とき、 あなたはログの行が従って欲しいフォーマットを与えることができます。 そのフォーマットはprintfと同じフォーマットです。更なる情報については フォーマットのセクションをご覧ください。

ハンドルの結びつけ

tie呼び出しの基本的な形は以下の通りです:

 tie *HANDLE, 'Tie::LogFile', '/path/to/log';

もしこれになじみがないのであれば、perltieマニュアルページを見たほうがいいかも しれません。必要とされる引数の後に各種のオプションを渡すことができます:

  • format

    formatオプションは、ログファイルに汎用的なフォーマットを設定することを可能にします。 このオプションの書き方はsprintfと同じやりかたです。しかし独自のタグのセットも持っています。 これらのタグで最も基本的なものは時刻/日付スタンプのための%d、そしてログメッセージのための%mです。 タグは大文字/小文字が区別されます。デフォルトのフォーマットは"[%d] %m"です。 最小限、%mタグが指定されます。

  • tformat

    %dトップレベルタグのために出力される時刻フォーマットを設定します。もしDate::Formatが インストールされていると、このフォーマットは直接Date::Format::time2str()に渡されます。 そうでなければPOSIX::strftime()に渡されます。何もフォーマットが設定されなければ、 どちらのモジュールも使われず、%d タグはscalar localtimeの出力で埋められます。

  • mode

    デフォルトではTie::LogFileはログファイルを>>モードでオープンします。 modeオプションで変更することができます。しかし少なくと現在はTie::LogFileは>>>だけをサポートしています。

  • force_newline

    デフォルトではTie::LogFileは各出力の最後に確実に改行があるようにします。 この動きはforce_newlineオプションで変更することができます。

  • autoflush

    デフォルトではTie::LogFileはファイルハンドルを自動フラッシュ(autoflush)しません。 自動フラッシュは、このオプションで有効にすることができます。

ログのフォーマッティング

最初のリリースでは、Tie::LogFileは5つのフォーマッティング・タグをサポートしています。 タグについてのいい考えのある人は実際に試してみて、作者に教えてください。素晴らしい タグは将来の改訂で入ります。

入っているタグには以下のものがあります:

  • %m

    ログメッセージ。これはprintあるいはprintfに渡したものそのものです。このタグが唯一 必須のタグです。

  • %d

    日付/時刻スタンプ。tformatオプションを使うことにより、このフォーマットを変更することができます。

  • %p

    プロセスID($$)。

  • %c

    Tie::LogFileは、それが出力した行数を管理しています。%cを使うとそのカウントが ログファイルに入ります。

  • %%

    リテラルの'%'。

独自のタグを入れる。

formatオプションに独自のタグを定義するための簡単なインターフェースがあります。 %Tie::LogFile::formatsハッシュには各タグのコード・リファレンスが入っています。 例えば%pのデフォルトの定義は以下のようなものです:

 $Tie::LogFile::formats{'p'} = sub { $$ };
 

入っているタグを、以下のような非常に混乱させるタグで上書きすることができます:

 $Tie::LogFile::formats{'d'} = sub { scalar localtime(rand(1000000000)) };

あるいは新しいタグを以下のように定義することができます:

 $Tie::LogFile::formats{'u'} = sub { POSIX::uname() };
 

formatsハッシュのなかのsubには2つのものが渡されます。$_[0]にはtieされたtypeglob、 $_[1]には出力されるログの行です。例えば:

 $Tie::LogFile::formats{'l'} = sub { length $_[1] };

バグ

わかっているバグはありません。しかし常にバグの可能性があります。

TODO

  • ハンドルからの読みこみ

  • より速くする

作者(AUTHOR)

Chris Reinhardt, <ctriv@dyndns.org>

参考資料

Date::Format, POSIX, perltie, perl.

翻訳者

川合孝典(GCD00051@nifty.ne.jp)