1

我有一个简单的类,允许我写入任何日志文件:

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]);
   }
}

这给了我错误:常量():找不到常量 Logger::DEBUG

但是,在推送处理程序时,如果我用简单的 Logger::DEBUG 替换 $level,它就可以工作。当它确实存在时,为什么它没有找到常数?

4

1 回答 1

2

函数参数中的字符串中的类名constant()必须是完全限定的。当您执行 Logger::DEBUG 时,它可以工作,因为该类是use'd,因此它解析为Monolog\Logger::DEBUG但在字符串中它只是保留Logger::DEBUG并且显然不存在。

因此,解决方案只是在字符串中使用完全限定名称,即

$level = constant('Monolog\Logger::'.strtoupper($level));
于 2014-03-19T09:38:54.303 回答