1

質問

class::methodロギング クラスを作成し、ロガー クラスの静的メソッドを呼び出した各行をスタンプしたいと考えています。

PHPで現在のメソッドを呼び出したものを知ることは可能ですか?

解決

助けてくれてありがとう。私のロギング方法の PHP コードは次のとおりです。

/**
 * Writes a line into the log.
 * @param string $level The logging level.
 * @param string $message The message.
 */
protected static function write($level,$message)
{
    self::scope_init();
    if(self::$scope[$level])
    {
        $e = new Exception;
        $stack = $e->getTrace();
        $caller = '';
        if(isset($stack[2]))
        {
            $class = isset($stack[2]['class']) ? $stack[2]['class'] : false;
            $method =  isset($stack[2]['function']) ? $stack[2]['function'] : '';
            if($class !== false)
            {
                $caller = $class.'::'.$method;
            }
            else
            {
                $caller = $method;
            }
        }

        $caller = substr(str_pad($caller,20),0,20);

        $msg = date('m.d.y h:i:sa').' ['.$level.'] ['.$caller.'] '.$message;
        self::$lines[] = $msg;
        echo "$msg\n";
    }
}
4

3 に答える 3

4

スタック トレースの出力に関するこの回答は、スタック トレースにアクセスする方法を提供します。そこから、最後から 2 番目の項目だけを取得して記録できます。

$e = new Exception;
var_dump($e->getTraceAsString());

#2 /usr/share/php/PHPUnit/Framework/TestCase.php(626): SeriesHelperTest->setUp()
#3 /usr/share/php/PHPUnit/Framework/TestResult.php(666): PHPUnit_Framework_TestCase->runBare()
#4 /usr/share/php/PHPUnit/Framework/TestCase.php(576): PHPUnit_Framework_TestResult->run(Object(SeriesHelperTest))
#5 /usr/share/php/PHPUnit/Framework/TestSuite.php(757): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
#6 /usr/share/php/PHPUnit/Framework/TestSuite.php(733): PHPUnit_Framework_TestSuite->runTest(Object(SeriesHelperTest), Object(PHPUnit_Framework_TestResult))
#7 /usr/share/php/PHPUnit/TextUI/TestRunner.php(305): PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult), false, Array, Array, false)
#8 /usr/share/php/PHPUnit/TextUI/Command.php(188): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), Array)
#9 /usr/share/php/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#10 /usr/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#11 {main}"
于 2013-01-19T01:47:55.870 に答える
2

__METHOD__呼び出しメソッドの魔法の定数binsideを使用できます

于 2013-01-19T01:48:42.793 に答える
1

これのことですか: apd-callstack ?</p>

于 2013-01-19T01:48:25.650 に答える