basePath('files/logs/' . $fileName); } if (empty($level)) { $level = config::sys('log.level', self::DEBUG); } if (empty($maxFiles)) { $maxFiles = config::sys('log.maxFiles', 3); } $logger = new static($name, $handlers, $processors); # rotatig file handler $rotatigFile = new RotatingFileHandler($fileName, $maxFiles, $level, true, 0664); $formatter = new Formatters\LineFormatter(config::sys('log.formatter.format', Formatters\LineFormatter::SIMPLE_FORMAT)); $formatter->ignoreEmptyContextAndExtra(true); if (config::sys('log.formatter.allowInlineLineBreaks', false)) { $formatter->allowInlineLineBreaks(true); } $rotatigFile->setFormatter($formatter); $logger->pushHandler($rotatigFile); # php handler $logger->pushHandler(new Handlers\FirePHPHandler()); return $logger; } /** * Get rotating log files content * @param int $limit ограничение максимального кол-ва строк, 0 - без ограничений * @param string|bool $name имя канала или false - текущее * @return array */ public function getRotatingFilesContent($limit = 0, $name = false) { if (empty($name)) { $name = $this->getName(); } $records = []; $i = 0; foreach ($this->getHandlers() as $h) { if (! is_a($h, RotatingFileHandler::class)) { continue; } $files = $h->getFilesList(); foreach ($files as $f) { $file = file($f); if ($file === false) { continue; } $file = array_reverse($file); foreach ($file as $line) { preg_match('/\[(?P.*)\] (?P' . preg_quote($name) . ').(?P\w+): (?P.*+)/', $line, $data); if (isset($data['date'])) { $records[] = '[' . $data['date'] . '] ' . $data['level'] . ': ' . $data['message']; $i++; } if ($limit > 0 && $i >= $limit) { break 3; } } } } return $records; } /** * Log message to show in browser console * @param int $level * @param string $message * @param array $context */ public function console($level = self::DEBUG, $message = '', $context = []) { $this->consoleLogs[] = [ 'level' => $level, 'message' => $message, 'context' => $context, ]; } /** * Get messages to show in browser console * @return array */ public function consoleLogs() { return $this->consoleLogs; } /** * Reset console messages */ public function resetConsoleLogs() { $this->consoleLogs = []; } public function onNewRequest($request) { $this->resetConsoleLogs(); $this->reset(); } }