2011-01-24 7 views
0

デバッグメッセージを即時にログに記録できるメソッドを作成しようとしています。メッセージが出現したファイル名と行番号を含めたいと思います。私の最初の傾向は、現在のファイル名と行番号を含む配列を返すloggingメソッドの引数の1つとしてdebug_backtrace()を与えることでした。デバッグログのファイルと行のトレースに関する問題(PHP)

問題は、最初のファイル(index.php)のファイルと行だけです。 index.phpはインクルードされたファイル内のクラスからメソッドを呼び出す5行のファイルですが、行とファイルの情報は何が何であっても無駄なことは常に(index.php、line 5)と言います。

コード内の現在の行とファイルを取得する方法はありますか?

[2011-01-23六時26分10秒]インフォメーション::非existant コントローラのために作られた 「リクエスト(ここで

追加

は、ファイルと行情報ですテスト)」、ファイル: "/home/spotless/public_html/mymvc/index.php"、 ライン:5、要求: "/テスト"

H EREは、その全体のindex.phpである:ここ

<?php 

    include_once('application/init.php'); 
    lev_init::init(); 
?> 

はinit.phpファイル(ライン37)内debug_backtraceを使用してロギング・コール()、である。

// if requested controller does not exist, log 
lev_logging::message('Request made for non-existant controller ('.$requested_controller.').', debug_backtrace()); 

第2の更新

debug_backtraceののvar_dump

アレイ(1){[0] =>アレイ(6){[ "ファイル"] => 文字列(42) " /home/spotless/public_html/mymvc/index.php " [" line "] => int(5)[" function "] => string(4)" init "0" {}}}

["class"] => string(8) "lev_init" ["type"] =>文字列(2) "::" ["args"] =>
+1

そうではありません。バックトレースには完全な情報が含まれている必要があります。それは配列であると認識していますか?あなたはバックトレースの例を見せてもらえますか? –

+0

@dqhendricks:すべての関数呼び出しの現在の行とファイルがドキュメントに表示されていることを確認してください。 – RageZ

+0

あなたの説明から、これはむしろ '__FILE__'と' __LINE__'定数を必要とします。 – mario

答えて

1

debug_backtrace配列がそうvar_export(debug_backtrace(), true)

すなわちを行う返します

// if requested controller does not exist, log 
lev_logging::message('Request made for non-existant controller ('.$requested_controller.').', var_export(debug_backtrace(), true)); 

注:

ちょうど、何をスタックトレースが重要かを編集します。

<?php 
// filename: /tmp/a.php 

function b_test($foo) 
{ 
    var_dump(debug_backtrace()); 
} 

function a_test($str) 
{ 
    echo "\nHi: $str"; 
    b_test('bar'); 
    var_dump(debug_backtrace()); 
} 

a_test('friend'); 
?> 

<?php 
// filename: /tmp/b.php 
include_once '/tmp/a.php'; 

?>

b_testでdebug_backtraceが含まにすべてを表示されます。 a_testの呼び出しは、返されて以来、b_test呼び出しを表示しません。

2

これはグローバルなコンテキストで、関数ではなく、通常の動作です。ファイルを含めると、ではなく、が呼び出しスタックに反映されます。関数とメソッドの呼び出しのみです。

私が知る限り、 "include trace"を構築する方法はありません。ネストされたインクルードのリストが入っています。これはSOとIIRCで繰り返し尋ねられています。見つかりました。

+0

これは、logging関数内からdebug_backtraceを呼び出すと、ロギング関数が呼び出された行が取得されることを意味しますか? – dqhendricks

+0

@dqhendricksはい、その行だけです(グローバルコンテキストの場合)。 –

+0

私は関数内でそれを行い、それは私に正しいファイルと行を与えます。それは完璧だ。 – dqhendricks

関連する問題