示例#1
0
 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;
 }
示例#2
0
 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);
 }
示例#3
0
 /**
  * Метод выполняет фактическую регистрацию плагина
  * 
  * @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);
     }
 }
示例#4
0
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);
}
示例#5
0
 /**
  * Метод каждое сообщение из стека оборачивает в див с отступом, соответствующим номеру сообщения.
  * 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;
 }
示例#6
0
 /**
  * Метод регистрации страницы
  * 
  * 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]);
     }
 }
示例#7
0
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));
         }
     }
 }
示例#9
0
 /**
 * Распечатывает текущее состояние дерева зависимости в лог.
 * При этом в дереве отмечаются всегда только полностью проверенные сущности.
 * Если, например, группа зависит от таблиц БД, которые были провалидированы, но при этом
 * сама группа отмечена, как валидная, то мы увидим подобную картину:
 * 
  +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();
 }
示例#10
0
 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);
     }
 }