logwatch で PHP のログが送られてこないのでなんとかした話

このブログはさくらのVPS(CentOS)で運営しており、logwatch という1日1回アクセスログやエラーログなどが良い感じにまとめて送ってくれるツールを使用しています。

logwatch は各種ログのパスを指定することでそのログをまとめてくれるのですが、デフォルトでだいたいの見たいログはセットされていて、PHPのエラーログももちろん取り込むように指定がされています。しかし、何日たっても PHP のエラーログがまとめられてこない。エラーの一切ないクリーンなコード書いちゃったかなぁとか思って実際にログを見てみると普通にエラーでてる…。

調べてみると、logwatch はログの日付をパースしてその日にまとめるログを判別しているっぽい。だから日付をパースをできないとログはこないということのようです。

設定方法

logwatch の PHP のエラーログの設定ファイルを開き、日付をパースしている部分を実際のログファイルの日付の形式に合わせて編集します。

$ sudo cp /usr/share/logwatch/scripts/services/php /etc/logwatch/scripts/services/
$ sudo vi /etc/logwatch/scripts/services/php
  #my $date_format = '%d-%b-%Y %H:%M:%S';
  my $date_format = '%a %b %d %H:%M:%S %Y';

  #$1 =~ /(\d+)-(\w+)-(\d+) (\d+):(\d+):(\d+)/;
  $1 =~ /(\w+) (\w+) (\d+) (\d+):(\d+):(\d+) (\d+)/;
 
  #$time = timelocal($6, $5, $4, $1, $month2num{$2}, $3-1900);
  $time = timelocal($6, $5, $4, $3, $month2num{$2}, $7-1900);

logwatch に設定されている PHP のエラーログの日付のフォーマットに、わざわざデフォルトで動かないものが指定されているということもないと思うので、環境によってフォーマットが変わる場合があるということですかね。ちょっとそこまではわかりませんでした。。

  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。