Blogブログ

ログ出力について Part2

こんにちは。HappyLifeCreatorsサポート担当の大谷です。

初回、ログ出力をテーマに記事を書かせていただきました。
ふと作成したログファイルを先日見てみると、バイト数がエラい事に・・・。


ファイル容量膨れ上がっとるやんけ!

これはアカンという事で、ログ出力について色々手直し&考えてみたことを色々とお話したいと思います。

ファイル容量対策

前回作成時も遠かれ早かれこの問題には対処が必要とは思ってましたが、予想を軽く上回るスピードでした・・・。

さて、ファイル容量対策ですが、書き込まれてデータの溜まったファイルを一旦バックアップして、真っ新なログファイルに書き込み開始するよう、定期的な変更が必要ですね。
その場合、以下2つを思いつきました。

 1.日付で一定間隔ごとに切り替える
 2.あらかじめ決めた容量を超えた時に切り替える

どっちを取ったとしても今回の目的は達成できますが、今回は2の容量で切り替える方法でやってみます。

ファイル容量を取得する

ファイルサイズは以下のように記述する事で取得できました。

filesize(パス);

ファイルサイズの最大を1MBと決め(テストなので少なめに設定)filesize関数で取って来たファイルのバイト数と比較します。

$file_size = filesize(パス);
//file_exists関数でファイルが存在するか確認、かつ$file_sizeが1MBを超えているか確認
if (file_exists(パス) && $file_size > 1 * 1024 * 1024) {
  //リネームしたファイルを圧縮する処理を入れる
  //ログファイルを削除する処理を入れる
}

こいつをログ出力の前に挿入します。
これでログ書き込みされる前にファイルサイズをチェックし、1MBを超えている場合はリネーム、ファイル圧縮されるはず、です。

実際にコーディングした物がこちらです。

1MBの容量を超えるよう適当にログにテキストを入力、保存しテストした結果、以下のようになりました。


(windows開発環境での結果画面です)

うまくいったようです。
ちなみにファイルリネーム、ファイル圧縮は以下の方法でおこないました。

$zip_obj = new ZipArchive;
$zip_obj->open(“/var/log/hogehoge_log_” . intval(date(‘YmdHis’)) . “.zip”, ZipArchive::CREATE);
$zip_obj->addFile(“/var/log/hogehoge_log.txt”);
$zip_obj->close();

まずクラスオブジェクトを作成し、クラス関数を呼び出す形ですね。

zip_obj->open() にて第一引数で指定したzipファイルをオープンします。
第二引数の ZipArchive::CREATE は指定したファイルが無い場合、作成します。
zip_obj->addfile() は圧縮するファイルを指定します。
zip_obj->close() で一連の処理を終了しています。

さらに圧縮後、元ファイルが残っていてはそこに上書きされ続けてしまうので、unlink関数で削除しています。

これでとりあえずは当初の目標は達成できたかと思います。
他にも、後からこうした方が良さそうとか出てきそうですが、本日はここまでとさせていただきます。

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

大谷

執筆者

Developer

大谷