codeigniter3 で のに、log_message()でログ出力されなくてハマった。
apache経由のアクセスは log_message('error','test')でログ出力OK
しかし、shellなどコマンドラインcliやcronだと、log_message('error','test')でログ出力NG
設定ファイル config.php の ログ関連設定をチェック
$config['log_threshold'] = 1; // 'error'だけ表示される $config['log_path'] = ''; // application/logsに出力される $config['log_file_permissions'] = 0644;
ログ出力ディレクトリ application/logs の パーミッションチェック
777 ok
エラー設定もチェック
ini_set('display_errors', 1); error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
おわかりだろうか?(原因判明)
###ちゃんと出力されているサイトと比較してみたら、
###shellなどコマンドラインcliやcronのログ出力
NGサイト
$config['log_file_permissions'] = 0644;
OKサイト
$config['log_file_permissions'] = 0666;
ログ出力時のパーミッションがトラブル原因だった。
apache 経由でその日に初回アクセスしたら、apacheでしか追記できないログになってた。
shell実行したユーザやcronユーザでその日に初回実行したら、apacheで追記できないではないか
昔は気にしてたけど、フレームワーク使うようになって忘れてた。てへ。
結論 設定ファイルでログ出力時のパーミッションを全員書き込み可能にしよう$config['log_file_permissions'] = 0666;
こんなので何日もハマるんだよな。このサイト開発3年目だったのにずっと気づかなかった。。。
誰かに届けっ