humanemulator.net — справка. Продукт, демо и покупка — на хуманэмулятор.рф | Демо | Купить | API | лог изменений

Обновлено в августе 2026. · Руководство humanemulator.net

Логирование скрипта

Теги: логи RPA

Объект logger пишет шаги робота в панель Studio, в файл и в SQLite. Ночной прогон с расписания без лога оставляет только «скрипт упал». Включайте logger в первом десятке строк, не «когда уже сломалось».

Сначала init

init задаёт минимум уровня (0..5), признак «скрипт не из чужой IDE», вывод в панель, путь текстового лога, путь SQLite, формат даты, локаль, транслит.

$logger->init(
  1,
  true,
  true,
  "C:\\bots\\logs\\run.txt",
  "C:\\bots\\logs\\run.sqlite"
);
$logger->info("Старт обхода");

Пустая строка пути — этот канал выключен. Две копии Studio: разные файлы логов, иначе записи перемешаются. См. порты.

Формат даты по умолчанию в объекте: d-m-Y H:i:s. Локаль en / ru влияет на подписи уровней в панели.

Полная сигнатура init: минимум уровня (0..5), «скрипт не из чужой IDE», вывод в панель, путь txt, путь sqlite, формат даты, локаль, транслит, use XHE API. Пустая строка пути — канал выключен. На машине разработчика оставьте debug; на ночном RT поднимите минимум до info, чтобы не раздувать файл селекторами.

Уровни сообщений

Минимум в init отсекает шум: на боевом роботе info+, debug оставьте для машины разработчика.

КодУровеньКогда
0traceСырой обмен, только локально
1debugСелекторы, промежуточные строки
2infoШаг сценария (бой)
3warnОбошли и пошли дальше
4–5error / criticalШаг сломался

HTML в панели: setFormatTagsForHtmlFormat. Жирное сообщение — флаг $isBold у info/log.

Что писать на шагах

Пишите после успешного wait, не до него — иначе журнал врёт, что страница готова. Связка: ожидание DOM.

  • Старт: URL, порт (get_port), имя задачи расписания.
  • После navigate: ошибка навигации, если есть.
  • После выборки: число строк/писем, путь сохранённого файла.
  • Перед exit: «готово» или «остановлен на шаге N».
$logger->info("navigate ok", array("url" => "https://example.com"));
$input->wait_element_exist_by_name("q");
$logger->info("поле q на месте");

Не кладите в лог пароли почты и ключи капчи. Транслит кириллицы для чужих систем: transliterateText и флаг в init.

Панель и ночной прогон

Пока сидите у Studio, панель удобна. Когда скрипт идёт из расписания в трее, панель никто не читает — обязателен файл или SQLite.

Пишите три якоря: старт (URL, get_port), середина (сколько строк/писем, путь файла), конец («готово» или шаг, на котором остановились). Без конца в журнале не отличить «ещё работает» от «процесс убили».

$logger->info("старт", array("port" => $app->get_port()));
$input->wait_element_exist_by_name("q");
$logger->info("форма на месте");
$logger->info("готово");

Две копии Studio — разные пути логов. Иначе утром не понять, чей прогон.

SQLite

Имеет смысл, когда робот крутится неделями: текстовый файл на сотни мегабайт неудобно фильтровать.

Раз в неделю удаляйте старые дни, иначе база раздуется так же, как файл.

Экспорт

exportAllLogsFromDbSQLiteToCsv — отдать в Excel. exportLogsByPeriodFromSQLiteToTextFile — текст или HTML за период. Удобно приложить к письму «что сделал робот вчера» через IMAP/SMTP или Outlook.

Не экспортируйте за год «на всякий случай»: сначала getLogsByPeriodFromSQLite / getLogCountByLevelFromSQLite, потом выгрузка. Старые дни чистите deleteLogsByPeriodFromSQLite.

FAQ

В панели пусто. writeLogToLogPanel = false или уровень сообщения ниже минимума init.

Файл не создаётся. Нет папки, нет прав, путь с несуществующим диском. Создайте C:\bots\logs заранее.

Две Studio пишут в один sqlite. Разведите пути. Это не блокировка «на двоих», это каша в отчёте.

В логе «navigate ok», клика не было. Сообщение написали до wait. Перенесите info после успешного exists.

Файл на гигабайт. Минимум уровня слишком низкий (trace/debug на бою) или пишете HTML страницы целиком. Режьте данные, чистите период, не кладите сырой DOM в каждую строку.

Поиск: logger.

Все руководства