Help us understand the problem. What is going on with this article?

【CakePHP】printfデバッグ用のメソッドまとめ

More than 5 years have passed since last update.

CakePHPでのprintfデバッグで使えるメソッドをまとめる。

画面に出力

phpのvar_dump()やprint_r()はpreタグをつけないと配列やオブジェクトの結果が見づらいが、CakePHPのdebug()やpr()ならpreタグ付きで出力されるので見やすい。

出力するメッセージは文字列(数値)、配列、オブジェクトなんでもOK。

1.debug()

debug('メッセージ');

また、第三引数にtrueを渡すとバッグトレース付きで出力してくれる。

debug('メッセージ',null,true);

app/Config/core.phpのdebugが0(本番モード)の場合、出力されない。
そのため、var_dump()などに比べソースの中にdebug()を消し忘れて本番で表示されてしまう心配がない。(もちろん消し忘れはだめだけど。)
逆にdebug()しても出ない場合は、debugが0でないか確認すること。

2.pr()
print_r()の短縮形。print_r()に比べてpreタグ出るし、書くの楽。

pr('メッセージ');

ログに出力

ログをapp/tmp/logs/error.logに出力してくれる。
ログファイルをtailfしながらデバッグする。

出力するメッセージは文字列(数値)、配列、オブジェクトなんでもOK。

1.$this->log()
Cakeで用意されているクラスの大本に定義されているので、どこからでも呼ぶことができる。

$this->log('メッセージ');

自分の環境では、$this->log()の結果に実行ファイルと行番号が出すためCakeに手を加えている。

ファイル:lib/Cake/Core/Object.php
※直接修正するより、appの下に同じファイル作ってオーバーライドする方法の方がいいのか??指摘頂けるとありがたいです。

※行番号とファイルの取得はググった結果を組み合わせて書いてるけど、もっとシンプルな書きかたがあるような気がしていて、こういうのあるよというのがあれば教えて頂けるとありがたいです。

public function log($msg, $type = LOG_ERR, $scope = null) {
  if (!is_string($msg)) {
    $msg = print_r($msg, true);

    //追加部分 start
    //デフォルトのログのみを対象にするため。
    if($type === LOG_ERR){
      //ファイル取得
      $trace = Debugger::trace(array('start' => 1, 'depth' => 2, 'format' => 'array'));
      $file = str_replace(array(CAKE_CORE_INCLUDE_PATH, ROOT), '', $trace[0]['file']);
      //行番号取得
      $line = $trace[0]['line'];
      //メッセージ作成
      $lineInfo = sprintf('%s (line %s)', $file, $line);
      $msg = "{$lineInfo} $msg";
    }
    //追加部分 end
  }

  return CakeLog::write($type, $msg, $scope);
}

2.LogError()

LogError('メッセージ');
kazu56
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした