public function write($logId, $msg) { if (!array_key_exists($logId, $this->FILES)) { //При поступлении первой записи от логгера, ему присваивается номер внутри сессии. $num = count($this->FILES) + 1; $num = pad_left("{$num}", 2, '0'); $this->FILES[$logId] = array('path' => $this->sessionDM->absFilePath(null, "{$num}. {$logId}", 'txt'), 'trim' => true); } $doTrim = $this->FILES[$logId]['trim']; $logFilePath = $this->FILES[$logId]['path']; //Если мы делаем первую запись в файл, то сделаем trim(), чтобы логи не начинались с переносов строки if ($doTrim) { $msg = ltrim($msg); $doTrim = !$msg; $this->FILES[$logId]['trim'] = $doTrim; } /* * Начинаем запись. Стоит помнить, что файлы могли быть удалены во время работы. */ $date = date(DF_PS); if (!$doTrim) { //Если мы не продолжаем делать трим, значит нашли первое не пустое сообщение и нужно писать лог. $this->doAppend($logFilePath, $msg); } $this->doAppend($this->fileCommon, "[{$date}] {$logId}: {$msg}"); return $this->valid; }
public function infoBox($title, $msg = '', $marker = '+') { $len = ps_strlen($title); $line = pad_left('', $len + 4, $marker); $str = "\n{$line}\n{$marker} {$title} {$marker}\n{$line}\n{$msg}\n"; $this->info($str); }
/** * Метод выполняет фактическую регистрацию плагина * * @param AbstractSmartyPlugin $plugin */ protected final function register(AbstractSmartyPlugin $plugin) { $class = get_class($plugin); if (array_key_exists($class, $this->PLUGINS)) { PsUtil::raise('Smarty plugin \'{}\' is already registered.', $class); } else { $this->PLUGINS[$class] = $plugin; $this->LOGGER->info('{}. {}', pad_left(count($this->PLUGINS), 1, ' '), $class); } }
function print_stack(Exception $exception) { dolog(''); dolog("ERROR occured: " . $exception->getMessage()); foreach ($exception->getTrace() as $num => $stackItem) { $str = $num . '# ' . (array_key_exists('file', $stackItem) ? $stackItem['file'] : '') . ' (' . (array_key_exists('line', $stackItem) ? $stackItem['line'] : '') . ')'; dolog(pad_left('', $num, ' ') . $str); } die(1); }
/** * Метод каждое сообщение из стека оборачивает в див с отступом, соответствующим номеру сообщения. * 0# C:\www\postupayu.ru\www\src\common\content\ContentHelper.php (39) * 1# C:\www\postupayu.ru\www\resources\folded\pagebuilders\basic\basic.php (53) * 2# C:\www\postupayu.ru\www\src\common\folded\pagebuilders\AbstractPageBuilder.php (55) */ private static function formatTraceMessagesFile(Exception $ex) { $stack = ''; foreach (self::extendTrace($ex) as $num => $stackItem) { $file = value_Array(array('file', 'class'), $stackItem); $line = value_Array('line', $stackItem); $stack .= pad_left('', $num * 2, ' ') . "{$num}# {$file} ({$line})"; $stack .= "\n"; } return $stack; }
/** * Метод регистрации страницы * * WebPages::register('xxx.php', 'Консоль администратора', PAGE_ADMIN, self::getIdent(), AuthManager::AUTH_TYPE_NO_MATTER, PAGE_ADMIN); * * @param string $path - путь к скрипту, например 'xxx.php' * @param string $name - название страницы, например 'Консоль администратора' * @param int $code - код страницы PAGE_ADMIN * @param int $builderIdent - идентификатор построителя страниц, например 'PB_admin::getIdent()' * @param int $authType - тип авторизации, необходимый для доступа к странице, например 'AuthManager::AUTH_TYPE_NO_MATTER' * @param int $pageCodeNoAccess - страница, на которую нужно перейти при отсутствии доступа, например 'BASE_PAGE_INDEX' * @param bool $allovedInProduction - признак, доступна ли страница в ProductionMode */ protected final function register($path, $name, $code, $builderIdent = null, $authType = AuthManager::AUTH_TYPE_NO_MATTER, $pageCodeNoAccess = null, $allovedInProduction = true) { if (!$allovedInProduction && PsDefines::isProduction()) { return; //---- } $path = PsCheck::notEmptyString($path); $name = PsCheck::notEmptyString($name); $code = PsCheck::int($code); if (array_key_exists($code, $this->PAGES)) { PsUtil::raise('\'{}\' is already registered. Cannot register WebPage with same code \'{}\'.', $this->PAGES[$code], $code); } else { $this->PAGES[$code] = new WebPage($path, $name, $code, $authType, $pageCodeNoAccess, $builderIdent); $this->LOGGER->info('+{}. {}', pad_left(count($this->PAGES), 2, ' '), $this->PAGES[$code]); } }
function pad($char, $length) { return pad_left('', $length, $char); }
/** * Метод регистрации экземпляров фолдингов * * @param FoldedResources $inst - экземпляр */ protected final function register(FoldedResources $inst) { $unique = $inst->getUnique(); if (array_key_exists($unique, $this->FOLDINGS)) { PsUtil::raise('Folding \'{}\' is already registered. Cannot register \'{}\' with same unique.', $this->FOLDINGS[$unique], $inst); } else { $this->FOLDINGS[$unique] = $inst; if ($this->LOGGER->isEnabled()) { $this->LOGGER->info('+{}. {}, count: {}.', pad_left(count($this->FOLDINGS), 3, ' '), $inst, FoldedStorage::getEntitiesCount($unique)); } } }
/** * Распечатывает текущее состояние дерева зависимости в лог. * При этом в дереве отмечаются всегда только полностью проверенные сущности. * Если, например, группа зависит от таблиц БД, которые были провалидированы, но при этом * сама группа отмечена, как валидная, то мы увидим подобную картину: * +GALLERY: | Сущности базы: | ps_gallery | ps_gallery_images */ private function logTrees($caption, $doLog = true) { if (!$doLog || !$this->LOGGER->isEnabled()) { return; //--- } $this->LOGGER->infoBox($caption); $GROUPS = PSCache::getCacheGroups(); $hasPrintedGroups = false; foreach ($GROUPS as $group) { $isGroupPrinted = false; foreach ($this->TREE_DEP as $type => $groups2entitys) { if (!array_key_exists($group, $groups2entitys)) { continue; } $valGr = !$this->isGroupValidatable($group); $valType = !$valGr && !$this->isTypeValidateble($type); if ($hasPrintedGroups && !$isGroupPrinted) { $this->LOGGER->info(); } if (!$isGroupPrinted) { $isGroupPrinted = true; $hasPrintedGroups = true; $this->LOGGER->info("\t" . ($valGr ? '+' : '|') . $group . ':'); } else { $this->LOGGER->info("\t|"); } $this->LOGGER->info("\t" . ($valType ? '+' : '|') . "\t{$type}:"); foreach ($groups2entitys[$group] as $child) { $varChild = !$valGr && !$valType && !in_array($child, $this->getChildsForValidate($type, $group)); $this->LOGGER->info("\t" . ($varChild ? '+' : '|') . "\t\t{$child}"); } } } $this->LOGGER->info(pad_left('', ps_strlen($caption) + 4, '+')); $this->LOGGER->info(); }
protected function pad_left($string, $key) { if (defined('STRICT_TYPES') && CAMEL_CASE == '1') { return (string) self::parameters(['string' => DT::STRING, 'key' => DT::STRING])->call(__FUNCTION__)->with($string, $key)->returning(DT::STRING); } else { return (string) pad_left($string, $key); } }