null, 'identify' => 'yansongda.supports', 'level' => BaseLogger::DEBUG, 'type' => 'daily', 'max_files' => 30, ]; /** * Forward call. * * @author yansongda * * @param string $method * @param array $args * * @throws Exception */ public function __call($method, $args): void { call_user_func_array([$this->getLogger(), $method], $args); } /** * Set logger. * * @author yansongda */ public function setLogger(LoggerInterface $logger): Logger { $this->logger = $logger; return $this; } /** * Return the logger instance. * * @author yansongda * * @throws Exception */ public function getLogger(): LoggerInterface { if (is_null($this->logger)) { $this->logger = $this->createLogger(); } return $this->logger; } /** * Make a default log instance. * * @author yansongda * * @throws Exception */ public function createLogger(): BaseLogger { $handler = $this->getHandler(); $handler->setFormatter($this->getFormatter()); $logger = new BaseLogger($this->config['identify']); $logger->pushHandler($handler); return $logger; } /** * setFormatter. * * @author yansongda * * @return $this */ public function setFormatter(FormatterInterface $formatter): self { $this->formatter = $formatter; return $this; } /** * getFormatter. * * @author yansongda */ public function getFormatter(): FormatterInterface { if (is_null($this->formatter)) { $this->formatter = $this->createFormatter(); } return $this->formatter; } /** * createFormatter. * * @author yansongda */ public function createFormatter(): LineFormatter { return new LineFormatter( "%datetime% > %channel%.%level_name% > %message% %context% %extra%\n\n", null, false, true ); } /** * setHandler. * * @author yansongda * * @return $this */ public function setHandler(AbstractHandler $handler): self { $this->handler = $handler; return $this; } /** * getHandler. * * @author yansongda * * @throws \Exception */ public function getHandler(): AbstractHandler { if (is_null($this->handler)) { $this->handler = $this->createHandler(); } return $this->handler; } /** * createHandler. * * @author yansongda * * @throws \Exception * * @return \Monolog\Handler\RotatingFileHandler|\Monolog\Handler\StreamHandler */ public function createHandler(): AbstractHandler { $file = $this->config['file'] ?? sys_get_temp_dir().'/logs/'.$this->config['identify'].'.log'; if ('single' === $this->config['type']) { return new StreamHandler($file, $this->config['level']); } return new RotatingFileHandler($file, $this->config['max_files'], $this->config['level']); } /** * setConfig. * * @author yansongda * * @return $this */ public function setConfig(array $config): self { $this->config = array_merge($this->config, $config); return $this; } /** * getConfig. * * @author yansongda */ public function getConfig(): array { return $this->config; } }