日付のないログに日付をつける

ちょっとした必要にかられて書いた。動作は↓読んだまんま。

#!/usr/bin/perl
use strict;
while(<STDIN>) {
  my $d=&now();
  print "$d $_";
}
sub now() {
  my ($sec,$min,$hour,$mday,$mon,$year,undef) = localtime(time);
  my $d = sprintf("%02d/%02d/%02d %02d:%02d:%02d",
            $year-100,$mon+1,$mday,$hour,$min,$sec);
  return $d;
}
exit 0;

mysqlの動きっぷりを見るために

$ while true ; do mysqladmin status ; sleep 5 ; done

とやってたんだけど、後から時間つきでグラフ化できるように書いたのです。実際に使ったコードは、while()ループの中で$_をいじくって表示をカスタマイズしてるんだけど、例示には向かないので一般に使えそうな内容に改変。

$ while true ; do mysqladmin status; sleep 5 ; done | ./date-add-filter.pl

こうやって使った。実際は tail -f にパイプで繋いで使う場面のほうが便利だな。

$ tail -f /path/to/file.log | ./date-add-filter.pl

とかね。

  • 10回に一回ヘッダを出す
  • ヘッダを出さないオプションを作る
  • usageなんてものを書いてみる

こんなことしてくとツールっぽくなるけどそれはそれ。
事が起きてログがに出て、から喰ってwhile()ループが処理するまでの時間なんて言わないでね。そんな厳密な話は無視。

………………。

↑こんなものを書いて、なおかつ全部済んだあとに気づいた話。
TeraTermのログ吐き機能にタイムスタンプを足すオプションが実装済みだった。やっちゃったなぁ。車輪の再発明ってほど大げさじゃないけどさ。かっこわるーい。