2011-12-07 5 views
0

ファイルまたは出力ストリームにエントリを追加するlogging libraryを書いています。ログに表示するファイルパスと行番号はどれですか?

エントリがログに追加されるときには、エントリを追加するために作成されたファイルや行番号などのコンテキスト情報も含まれます。

私の質問は:エントリを追加した呼び出しのファイルパスと行番号、またはイベントをトリガしてメッセージを記録する呼び出し元を使用する必要がありますか?

trigger.php:

<?php 

    class Do 
    { 
     public function something() 
     { 
      $this->log->add('Did something.', E_USER_NOTICE); # line 6 
     } 
    } 

do.php

<?php 

    $do->something(); #line 2 

今、メッセージは、 "何かをしました。" do.php行6からログされていると記録されています。メッセージがtrigger.php 2行目から来たと言うためにロギングクラスを変更する方が良いですか?いくつかの明確化

EDIT

  1. ライブラリには、ログエントリにコールスタック全体が含まれています。したがって、豊富な機能を備えたロギングクラスでは、上の例に含まれるものよりも多くのことが分かります。
  2. ライブラリはログレベルを使用し、不要なレベルをフィルタリングします。上記の例はそれを示していませんが、ライブラリ自体を見て確かに知ることができます。

残念ながら、このシナリオでメッセージがどのように表現されているかについては不明でした。この非常に小さなシナリオでは、1つのファイルパスと1つの行しか表示されません。 これは変更できないと仮定します、どのファイルパスと行番号が記録されますか?

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

+0

6行目で十分な情報が得られますか?それだけで行6と言う場合、どのようにそれがどこから呼び出されて知っていますか?Doクラスを複数の異なる場所で使用すると、常に6行目が非常に役に立つとは思われません。 – dm03514

答えて

1

また、2つではなく3つのレベルがある場合はどうなりますか?もしあなたが4人いたら?実際のlog()呼び出しが現れる行のトレースを保持するという従来の方法に従うことをお勧めします。

class client 
{ 
    public function get_some_data() 
    { 
    $data = $this->get_my_data(); 

    if (empty($data)) { 
     $this->log->add('no data in sight'); 
    } 

    // lots of processing 

    if ($something) { 
     $this->log->add('data was corrupted'); 
    } 
    } 
} 

//... 

$client->get_some_data(); 

だけ上位の呼び出しをログに記録する場合は、あなただけ(それはget_some_dataで起こったことを知っている)ではなく、正確でしょう。 「はい、ログに記録された正確なエラーを使用して見つけることができます」と思うかもしれませんが、本当にやりたいことではない問題を突き止めるためにログを掘っているときです。

この関数をいくつか呼び出していて、どの行がログに記録されているかについての詳しい情報が必要な場合は、ログの横に最小スタックトレースを格納してください。debug_backtrace()を参照してください。あなたがDEV /デバッグ状況にしたいログを本番で欲しいものではないので、私は強く、あなたは別のログレベルを追加することをお勧めします

2011-12-25 17:02:37 ERROR "data was corrupted" at /path/client.php:6 (called from /path/somefile.php:57) 

限り最小限にすることができます。

+0

ありがとう、私は私の質問でいくつかを明確にしました。私がこれから取り除くのは、この例では両方を含める必要があるということです。 –

関連する問題