Где искать следы сбоев 1С и как настроить запись ошибок

· 10 мин

Содержание

Ошибки 1С пишутся в три места. Прикладные события и ошибки пользователей — в журнал регистрации: у файловой базы это папка 1Cv8Log в каталоге базы, у серверной — <каталог кластера>\reg_1541\<ИД базы>\1Cv8Log. Сбои платформы, взаимоблокировки и медленные запросы — в технологический журнал, который включают файлом logcfg.xml. Аварийные падения процессов — в дампы .mdmp.

Что выбрать для отладки? Журнал регистрации включён всегда и подходит для вопроса «кто и когда получил ошибку». Технологический журнал включают на время, когда нужно понять причину на уровне платформы и СУБД. Дампы нужны, если процесс 1С вылетает без сообщения. Отдельный вопрос — куда отправлять отчёт об ошибке, когда разобраться самому не вышло.

Журнал регистрации: куда пишутся ошибки в файловой и серверной базе

Журнал регистрации ведёт сама платформа. В него попадают входы и выходы, запись и проведение документов, ошибки обмена, исключения в регламентных заданиях и всё, что программист записал из кода.

Где лежат файлы журнала

Вариант базыКаталог журнала
Файловая, Windows<каталог базы>\1Cv8Log — рядом с файлом 1Cv8.1CD
Серверная, Windows<каталог srvinfo>\reg_1541\<GUID базы>\1Cv8Log
Серверная, Linuxкаталог srvinfo пользователя usr1cv8, далее reg_1541/<GUID базы>/1Cv8Log

Каталог srvinfo задаётся при установке службы сервера. Посмотреть его можно в параметрах запуска службы «Агент сервера 1С:Предприятия 8.3»: в строке запуска ragent.exe после ключа -d.

GUID базы — это её идентификатор в кластере. Его видно в консоли кластера в свойствах информационной базы. Если папок <GUID> несколько, нужная та, где файлы журнала изменились последними.

Два формата файлов

  • 📁 Старый формат — файл 1Cv8.lgf (справочник пользователей , компьютеров, событий) и файлы *.lgp с записями за периоды.
  • 🗄 Новый формат — один файл 1Cv8.lgd, по устройству это база SQLite. Появился в 8.3.5.

Новый формат удобнее для отбора, но при больших объёмах и одновременной записи из многих сеансов многие администраторы возвращаются на старый. Читать оба формата лучше средствами 1С: при прямом открытии .lgd сторонней программой во время работы можно получить блокировку файла.

Как открыть журнал из программы

  • 🔧 В Конфигураторе: Администрирование → Журнал регистрации.
  • 🖥 В режиме Предприятие типовых конфигураций (Бухгалтерия 3.0, ЗУП 3.1, УТ 11): Администрирование → Обслуживание → Журнал регистрации.
  • 🧭 В любой конфигурации: Все функции → Стандартные → Журнал регистрации. Если пункта «Все функции» нет, включите его в параметрах программы через меню-гамбургер.

Для поиска ошибок поставьте отбор по полю Уровень = «Ошибка» и сузьте интервал до часа, когда пользователь сообщил о проблеме. Двойной щелчок по строке откроет полный текст события с комментарием и данными.

Если ошибка возникает в обмене или регламентном задании, отберите журнал по событию: у таких записей имя события начинается с названия подсистемы, например «Обмен данными» или «Регламентные задания».

Как программист записывает свои ошибки в журнал

Платформа фиксирует далеко не всё. Если обработка ловит исключение в Попытка … Исключение и молча идёт дальше, следа не останется. Поэтому «куда писать ошибки» из своего кода — тоже в журнал регистрации, методом ЗаписьЖурналаРегистрации.

Попытка
    ЗагрузитьФайлПоставщика(ПутьКФайлу);
Исключение
    ИнфоОбОшибке = ИнформацияОбОшибке();
    ЗаписьЖурналаРегистрации(
        "ЗагрузкаПрайса.Ошибка",
        УровеньЖурналаРегистрации.Ошибка,
        ,
        ПутьКФайлу,
        ПодробноеПредставлениеОшибки(ИнфоОбОшибке));
    ВызватьИсключение;
КонецПопытки;

Параметры по порядку: имя события, уровень, объект метаданных (здесь пропущен), данные и комментарий. Свои события называйте с точкой — «Подсистема.Действие». Тогда в отборе журнала их легко найти и отделить от системных.

Что важно при записи из кода:

  1. Пишите ПодробноеПредставлениеОшибки, а не КраткоеПредставлениеОшибки: в подробном есть модуль и номер строки.
  2. Не глушите исключение после записи, если вызывающий код должен узнать о сбое. В примере выше ВызватьИсключение передаёт ошибку дальше.
  3. В цикле по тысячам строк не пишите событие на каждую строку уровня «Информация». Журнал разрастётся на гигабайты, а отбор станет медленным.

Запись в журнал регистрации работает и на клиенте, и на сервере. С клиента платформа передаёт запись на сервер, так что каталог хранения один и тот же.

Технологический журнал: запись ошибок платформы на сервере и клиенте

Журнал регистрации не покажет, почему упал рабочий процесс, на каком запросе случилась взаимоблокировка или что ответила СУБД. Для этого есть технологический журнал (ТЖ). По умолчанию он выключен. Включается файлом logcfg.xml.

Куда положить logcfg.xml

Платформа ищет файл в каталоге conf:

  • 🪟 Windows, общий для всех версий: C:\Program Files\1cv8\conf\
  • 🪟 Windows, для одной версии: C:\Program Files\1cv8\8.3.xx.xxxx\bin\conf\
  • 🐧 Linux: каталог conf в каталоге установки платформы, например /opt/1cv8/conf/

Файл подхватывается без перезапуска службы: платформа перечитывает его примерно раз в минуту. Это касается и сервера, и толстого или тонкого клиента на рабочем месте, если файл лежит в каталоге клиентской платформы.

Минимальная настройка под ошибки

Такой конфиг пишет только исключения, ошибки запросов и взаимоблокировки, хранит их сутки и включает дампы:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1C_TJ\errors" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="QERR"/>
    </event>
    <event>
      <eq property="name" value="TDEADLOCK"/>
    </event>
    <property name="all"/>
  </log>
  <dump create="true" location="D:\1C_TJ\dumps" type="3"/>
</config>

Что означают события:

  • ⚠️ EXCP — исключительные ситуации платформы, в том числе те, что пользователь видит как «Неизвестная ошибка».
  • 🧮 QERR — ошибки компиляции запроса и ограничений на уровне записей.
  • 🔒 TDEADLOCK — взаимоблокировки на управляемых блокировках. Для таймаутов добавьте TTIMEOUT.

Для медленных запросов подключают DBMSSQL или DBPOSTGRS с отбором по длительности. Этот поток очень объёмный, включайте его только на время замера.

Отведите под каталог ТЖ отдельную папку и отдельный диск, не системный. Платформа удаляет в каталоге location старые файлы по параметру history. Без отбора по событиям ТЖ на нагруженном сервере пишет десятки гигабайт в час и может заполнить диск, после чего встанут все базы.

Как выглядит результат

В каталоге location появятся подпапки по процессам: rphost_1234, rmngr_5678, ragent_910, 1cv8c_4321 и т. п. Число в имени — PID процесса. Внутри — файлы вида 26100714.log: год, месяц, день и час. Каждый час начинается новый файл.

Чтобы найти нужное событие, смотрите время ошибки в журнале регистрации, затем открывайте файл за этот час в папке rphost с тем же PID, что у рабочего процесса пользователя в консоли кластера.

Дампы и журнал событий Windows: когда процесс 1С падает

Если клиент закрывается без сообщения или служба сервера перезапускается сама, журнал регистрации часто пуст. Причину ищут в двух местах.

Дампы. Элемент <dump> в logcfg.xml из примера выше задаёт каталог. Тип 3 даёт дамп с данными памяти — его достаточно для разбора в поддержке. Полный дамп процесса rphost весит гигабайты, поэтому создавайте его только по просьбе того, кто будет анализировать.

Журнал событий Windows. Откройте eventvwr.msc → Журналы Windows → Приложение. Отберите записи по источникам, в имени которых есть «1C». Служба агента сервера пишет туда ошибки запуска, проблемы с портами и лицензиями. Там же видны падения rphost.exe и 1cv8c.exe с источником «Application Error».

На Linux сообщения службы сервера ищите через journalctl по имени юнита службы 1С, а падения процессов — в каталоге дампов из logcfg.xml.

Ротация и хранение логов, чтобы диск не кончился

Журнал регистрации

Настройка — в Конфигураторе: Администрирование → Настройка журнала регистрации. Там два важных параметра:

  1. Уровень регистрации — «Регистрировать ошибки», «…ошибки и предупреждения», «…ошибки, предупреждения и информацию» или «все события». Для поиска ошибок хватит второго варианта, для расследования «кто удалил документ» нужен уровень «все события».
  2. Разделять журнал по периодам — день, неделя, месяц или год. Чем больше пользователей, тем короче период. Для базы на 50 пользователей обычно хватает разбивки по дням.

Кнопка Сократить в том же окне удаляет записи до выбранной даты. Перед удалением можно сохранить их в файл — это и есть архив журнала.

Сокращение журнала на большой серверной базе занимает время и нагружает диск. Запускайте его вне рабочих часов, а сохранённый архив проверьте, прежде чем удалять старые файлы вручную.

Технологический журнал

  • ⏱ Параметр history — сколько часов хранить файлы. Для разовой диагностики хватает 24–72.
  • 🗂 Отдельный <log> под каждую задачу: ошибки храните дольше, замеры запросов — пару часов.
  • 🧹 После диагностики уберите или закомментируйте лишние <log> в logcfg.xml. Оставлять полный ТЖ включённым «на всякий случай» — частая причина забитого диска.

Ориентиры по объёму

Что пишемОбъём на сервер с 50–100 пользователями
Журнал регистрации, все событияпримерно сотни мегабайт в месяц
ТЖ: EXCP, QERR, TDEADLOCKпримерно десятки мегабайт в сутки
ТЖ: DBMSSQL без отборагигабайты в час

Цифры ориентировочные: всё зависит от числа обменов, регламентных заданий и того, сколько пишет сам код конфигурации.

Консоль кластера и утилиты: как разбирать записанные ошибки

Сами логи ничего не объясняют, пока их не сопоставить с сеансами и процессами. Для этого пригодятся:

  • 🖥 Консоль администрирования серверов 1С. В ветке «Рабочие процессы» видно PID каждого rphost — по нему находят папку ТЖ. В ветке «Сеансы» — пользователь, компьютер и номер соединения, в «Блокировки» — кто держит объект.
  • ⌨ Утилита rac — то же из командной строки. Начните с rac cluster list, затем rac session list --cluster=<ИД кластера>. Остальные команды смотрите в rac help.
  • 🔎 Поиск по тексту ТЖ. Файлы ТЖ — обычный текст в UTF-8. На Windows подойдёт findstr или PowerShell, на Linux — grep.
findstr /s /i /c:"EXCP" D:\1C_TJ\errors\*.log
Get-ChildItem D:\1C_TJ\errors -Recurse -Filter *.log |
  Select-String -Pattern "TDEADLOCK" |
  Select-Object -First 50
  • 📤 Выгрузка журнала регистрации. В форме журнала есть команда сохранения отобранных записей в файл. Отправлять разработчику лучше выгрузку с отбором по времени и уровню, а не каталог 1Cv8Log целиком.

Сопоставляйте журналы по времени. Запись в журнале регистрации даёт пользователя и минуту, ТЖ — точную причину до миллисекунды, консоль — PID процесса. Вместе они отвечают почти на любой вопрос о сбое.

Что у вас произошло?

Куда отправлять отчёт об ошибке, если сами не справились

Когда причина найдена, но исправить её нельзя без разработчика, ошибку нужно передать дальше. Адресат зависит от того, чья это ошибка.

Чья ошибкаКому писатьЧто приложить
Доработка вашей конфигурации или внешняя обработкаПрограммисту или фирме, которая делала доработкуТекст события из журнала регистрации, шаги воспроизведения
Типовая конфигурация без доработокПартнёру 1С, который обслуживает вас по договору ИТС, или на линию поддержки разработчика конфигурацииНомер релиза, отчёт об ошибке, выгрузку журнала
Сбой самой платформыЧерез партнёра в поддержку платформыВерсия платформы, фрагмент ТЖ, дамп

Отчёт об ошибке из окна сообщения

В платформе 8.3.17 и новее окно необработанной ошибки содержит команду формирования отчёта об ошибке. Отчёт собирается в архив: в нём текст ошибки, стек вызовов, версия платформы и конфигурации, сведения о компьютере. Его можно сохранить в файл и передать тому, кто будет разбираться.

Перед отправкой проверьте, что в отчёте нет лишнего. В стеке и данных события иногда видны имена контрагентов и суммы — если это чувствительно, согласуйте передачу с руководителем.

Что собрать перед обращением в поддержку
Выполнено: 0 / 7

Частые вопросы по логам и диагностике 1С

Можно ли перенести журнал регистрации на другой диск?
Средствами конфигуратора каталог не меняется: журнал лежит в каталоге базы или кластера. Для серверной базы переносят весь каталог srvinfo при переустановке службы с другим ключом -d.
Почему журнал регистрации пустой, хотя ошибки были?
Проверьте уровень регистрации в настройке журнала: при уровне «Не регистрировать» записи не пишутся. Ещё одна причина — ошибку перехватил код и не записал её.
Можно ли удалить папку 1Cv8Log, чтобы освободить место?
Только при остановленной работе с базой и после архивации. Платформа создаст журнал заново, но история пропадёт. Безопаснее сократить журнал штатной командой.
Нужно ли перезапускать сервер после изменения logcfg.xml?
Нет. Платформа перечитывает файл примерно раз в минуту, новые настройки начинают действовать без перезапуска службы.
Влияет ли технологический журнал на скорость работы?
Узкий отбор по EXCP и TDEADLOCK почти не заметен. Полный ТЖ без фильтров заметно нагружает диск и замедляет рабочие процессы.