class DurpLogger extends StreamHandler {
protected function write(array $record) {
if ($this->getLevel() == Durp::Debug && !Configuration::debug()) {
return;
}
parent::write($record);
}
}
如果一个日志请求到达且处理器的日志级别设置为DEBUG,而应用程序的Configuration::debug()为FALSE,则只需返回而不写入日志消息。否则,StreamHandler将执行其操作。
我在想是否这是使用Monolog的最佳方式,或者可能有更简洁的方法来完成此操作。
我预计我的应用程序中会有一个DEBUG、INFO、ERROR和其他我可能需要的级别的处理器。也许不依赖于仅能为TRUE或FALSE的Configuration::debug(),而是依赖于Configuration::logLevel(),以允许我更细粒度地控制日志记录输出,这样更有意义。
但即使如此,在应用程序级别上控制Monolog时,扩展StreamHandler是否是最合适的选择呢?
更新:
现在,我考虑使用级别而不仅仅是布尔型的debug,类似以下代码:
class DurpLogger extends StreamHandler {
public function __construct() {
parent::__construct(Configuration::logFile(), Configuration::logLevel());
}
protected function write(array $record) {
if (!($this->getLevel() >= Configuration::logLevel())) {
return;
}
parent::write($record);
}
}
然后我会在应用程序中像这样使用它。
class Durp {
private $logger;
public function __construct() {
$this->logger = new Logger('durp-service');
$this->logger->pushHandler(new DurpLogger());
$this->logger->addDebug('Debugging enabled');
$this->logger->addInfo('Starting Durp');
}
}
我觉得StreamHandler处理文件写入事务,所以我在其基础上进行了扩展。如果我将Configuration中的日志级别提高到Logger::INFO,那么"Debugging enabled"消息就不会被记录。
欢迎提出建议,让内容更加易懂。