2014-03-19 17 views
1
用独白的时候

我有一个简单的类,让我写任何日志文件:奇怪的错误:“无法找到固定记录仪:: DEBUG”在Laravel

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

class Mylog 
{ 
    public function __construct($log, $level = 'debug') 
    { 
     $this->monolog = new Logger($log); 

     $level = constant('Logger::'.strtoupper($level)); 

     $this->monolog->pushHandler(new StreamHandler(storage_path('logs/'.$log.'-'.date('Y-m-d').'.txt')), $level); 
    } 

    public function __call($method, $arguments) 
    { 
     $this->monolog->{$method}($arguments[0]); 
    } 
} 

这给了我错误:常数():无法找到固定记录仪:: DEBUG

然而,推动处理程序时,如果我只是记录仪:: DEBUG替换$的水平,它的工作原理。为什么它没有找到恒定的,事实上,它存在?

回答

1

像参数的constant()功能在字符串中的类名必须是完全合格的。当你做记录仪:: DEBUG它的工作原理,因为类是use'd,所以它解析为Monolog\Logger::DEBUG但字符串它只是保持Logger::DEBUG并且显然不存在。

因此,简单的办法就是使用完全合格的名称字符串内,即

$level = constant('Monolog\Logger::'.strtoupper($level)); 
+0

有道理,谢谢你的帮助的解释@Seldaek – kjones