- ベストアンサー
ログの記録方法について
現在、以下のように記録する最大数を超えた場合、 古いデータは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;
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純に、設定行数を超えたら `mv backlog3 backlog2`; `mv backlog2 backlog3`; `mv backlog1 backlog2`; `mv logfile backlog1`; とやっておいて、データを(既にカラになった)logfileに書き込めばいいのではないでしょうか。 mvを使ったのは排他制御が不要で速度が速いためです。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
あれ? rename 'backlog3' 'backlog2'; なんかじゃダメなんだったっけ>#1.