我已经创建了一个日志记录类,并希望使用调用记录器类的静态方法的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";
}
}
答案 0 :(得分:4)
This answer about printing stack traces提供了一种访问堆栈跟踪的方法。从那里,你可以得到倒数第二个项目并记录下来。
$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}"
答案 1 :(得分:2)
您可以使用调用方法
的__METHOD__
magic constantbinside
答案 2 :(得分:1)
你的意思是这个:apd-callstack?