• ベストアンサー

ログの記録方法について

現在、以下のように記録する最大数を超えた場合、 古いデータは1行削除、新規データは追加するようにしてるのですが これを最大数を超えた場合にはfile.txtのすべてデータを 別に自動生成した過去ログファイルに記録し、 また過去ログファイルは最大5ファイルまで作成したいのです。 もしやり方が分かるようでしたらお手数ですがお教えいただけませんか? $maxlog = $logmax; #ログファイルの場所 $comment =~ s/\n//g; ($sec,$min,$hour,$day,$mon,$year,$wday,$dmy,$dmy) = localtime(time); $year = 1900 + $year; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($day < 10) { $day = "0$day"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } $date = "$year\/$mon\/$day $hour\:$min"; # ログファイル読込 open LOG,$file; @log = <LOG>; close LOG; # 先頭に新規ログデータを追加 unshift (@log,"$date<>$mailto<>$comment<>$agent<>$host<>$toki<>\n"); # 保存行数を超える分末尾を削除 while(@log > $maxlog){ pop @log; } # 更新されたデータでログファイルに上書き open LOG,">$file"; print LOG @log; close LOG;

質問者が選んだベストアンサー

  • ベストアンサー
  • MOMON12345
  • ベストアンサー率32% (1125/3490)
回答No.1

単純に、設定行数を超えたら `mv backlog3 backlog2`; `mv backlog2 backlog3`; `mv backlog1 backlog2`; `mv logfile backlog1`; とやっておいて、データを(既にカラになった)logfileに書き込めばいいのではないでしょうか。 mvを使ったのは排他制御が不要で速度が速いためです。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あれ? rename 'backlog3' 'backlog2'; なんかじゃダメなんだったっけ>#1.

関連するQ&A

専門家に質問してみよう