Файл logcfg.xml: запускаем техжурнал на рабочем сервере 1С и не забиваем диск

· 9 мин

Содержание

Технологический журнал 1С на сервере включается одним файлом: logcfg.xml кладут в каталог conf платформы, например C:\Program Files\1cv8\conf\ в Windows или /opt/1cv8/conf/ в Linux. Службу перезапускать не нужно: сервер 1С перечитывает файл примерно раз в минуту и сам начинает писать логи в указанную папку.

Чтобы выключить журнал, файл удаляют или переименовывают. Вся настройка — что писать, куда и сколько хранить — тоже задаётся внутри этого XML.

Что даёт технологический журнал на сервере 1С

Журнал регистрации показывает, кто и что сделал в базе. Технологический журнал показывает, как работала платформа: какие запросы шли в СУБД, сколько они длились, где возникли исключения, кто кого заблокировал.

Его включают, когда нужно ответить на вопросы, которых нет в стандартных отчётах:

  • 🐢 какие запросы тормозят и из какого модуля они вызваны;
  • 🔒 кто держит управляемую блокировку и почему соседние сеансы ждут;
  • 💥 почему падает рабочий процесс rphost или клиент получает «Неизвестную ошибку»;
  • 🔌 почему рвутся соединения и что происходит при старте сеанса;
  • 📈 где утекает память, если процесс растёт до нескольких гигабайт.

Держать полный журнал включённым постоянно не стоит. Его включают под конкретную задачу, собирают данные за нужный период и сужают настройки. Минимальный постоянный журнал — исключения и взаимоблокировки — можно оставить на сервере навсегда.

Что подготовить на сервере до включения журнала

Пять минут подготовки избавляют от двух главных проблем: журнал не пишется или, наоборот, за ночь съедает весь диск.

  1. Отдельный диск или раздел. Под логи нужен не системный диск. Подробный журнал по SQL-запросам на нагруженном сервере легко пишет десятки гигабайт в час.
  2. Папка для логов. Создайте её заранее, например D:\1c_logs\techlog. Короткий путь без пробелов проще использовать в скриптах.
  3. Права. Пользователь, от имени которого работает служба агента сервера (по умолчанию USR1CV8), должен иметь права на запись в эту папку. В Linux — владелец каталога usr1cv8 или права на запись для этого пользователя.
  4. Каталог conf. Проверьте, где он лежит. Общий каталог C:\Program Files\1cv8\conf\ действует на все установленные версии платформы. Есть и каталог конкретной версии: C:\Program Files\1cv8\8.3.xx.xxxx\bin\conf\.
  5. Редактор. Блокнот подойдёт, но удобнее Notepad++ или VS Code: сразу видно кодировку и подсветку XML.

Если в системе включено скрытие расширений, легко сохранить файл как logcfg.xml.txt. Сервер такой файл не увидит. Включите показ расширений в проводнике перед работой.

Как включить технологический журнал 1С: пять шагов

Шаг 1. Создайте файл logcfg.xml

Начните с минимальной конфигурации. Она пишет исключения и взаимоблокировки, весит немного и безопасна для рабочего сервера:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="D:\1c_logs\techlog" history="168">
        <event>
            <eq property="name" value="EXCP"/>
        </event>
        <event>
            <eq property="name" value="TDEADLOCK"/>
        </event>
        <property name="all"/>
    </log>
    <dump create="false"/>
</config>

Шаг 2. Сохраните файл в кодировке UTF-8

Кодировка должна совпадать с объявленной в первой строке. В Notepad++ это меню Кодировки → UTF-8.

Шаг 3. Положите файл в каталог conf

Скопируйте logcfg.xml в C:\Program Files\1cv8\conf\ (или в /opt/1cv8/conf/ в Linux). Для записи в Program Files понадобятся права администратора.

Шаг 4. Подождите около минуты

Перезапуск службы не нужен. Сервер проверяет файл настроек раз в минуту. Это удобно: журнал можно включать в рабочее время, не обрывая сеансы пользователей.

Шаг 5. Проверьте, что логи появились

В папке D:\1c_logs\techlog должны появиться подпапки вида rphost_4512, rmngr_3100, ragent_2800 — по одной на каждый процесс сервера. Внутри — файлы с именами по шаблону ГГММДДЧЧ.log, по одному на каждый час.

Если подпапки есть, но файлы пустые — это нормально для минимальной конфигурации: исключений просто ещё не было.

Параметры logcfg.xml: что за что отвечает

Файл строится из нескольких элементов. Разберём главные.

Элемент / атрибутЧто задаётПример
<log location>Папка для логовD:\1c_logs\techlog
historyСколько часов хранить файлы, старшие удаляются сервером24, 168
<event>Условие отбора событий<eq property="name" value="EXCP"/>
<property name="all"/>Писать все свойства отобранных событий—
<dump>Создание дампов при аварии процессаcreate="false"
<plansql/>Сбор планов запросов СУБДставится внутри <config>

Условия отбора событий

Внутри <event> пишут условия сравнения. Несколько условий в одном <event> работают как «И». Несколько блоков <event> — как «ИЛИ».

  • eq — равно;
  • ne — не равно;
  • gt, ge — больше, больше или равно;
  • lt, le — меньше, меньше или равно;
  • like — совпадение по шаблону.

Например, «все запросы к MS SQL дольше одной секунды» — это два условия в одном блоке:

<event>
    <eq property="name" value="DBMSSQL"/>
    <ge property="duration" value="1000000"/>
</event>

В 8.3 длительность указывается в микросекундах: одна секунда — это 1000000, а не 1000. Ошибка в три нуля превращает фильтр «долгих запросов» в запись вообще всех запросов.

События, которые нужны чаще всего

СобытиеЧто фиксирует
EXCPИсключения: ошибки, которые видит пользователь, и внутренние сбои
TDEADLOCKВзаимоблокировки управляемых блокировок
TTIMEOUTПревышение времени ожидания на управляемой блокировке
TLOCKУстановка управляемых блокировок
DBMSSQLЗапросы к MS SQL Server
DBPOSTGRSЗапросы к PostgreSQL
SDBLЗапросы на уровне платформы (язык запросов 1С)
CALL, SCALLСерверные вызовы и их длительность
CONNУстановка и разрыв соединений
PROCСтарт и остановка процессов сервера
LEAKSУтечки памяти (нужен отдельный элемент <leaks>)

Дампы процессов

Элемент <dump> управляет созданием дампов при аварийном завершении процесса. Для диагностики падений rphost пишут, например, <dump location="D:\1c_logs\dumps" create="1" type="0"/>. Тип 0 — минимальный дамп; полные дампы весят столько же, сколько память процесса, и нужны только по запросу поддержки.

Готовые настройки журнала под разные задачи

Один универсальный logcfg.xml для всех случаев — плохая идея. Под каждую задачу свой набор событий.

Медленные запросы

Пишем только долгие запросы к СУБД и включаем планы:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="D:\1c_logs\slow" history="24">
        <event>
            <eq property="name" value="DBMSSQL"/>
            <ge property="duration" value="2000000"/>
        </event>
        <property name="all"/>
    </log>
    <plansql/>
</config>

Для PostgreSQL замените DBMSSQL на DBPOSTGRS. Порог в 2 секунды — разумный старт; если запросов слишком много, поднимите его.

Блокировки и ожидания

<event>
    <eq property="name" value="TTIMEOUT"/>
</event>
<event>
    <eq property="name" value="TDEADLOCK"/>
</event>
<event>
    <eq property="name" value="TLOCK"/>
    <ge property="duration" value="1000000"/>
</event>

Событие TLOCK без фильтра по длительности на нагруженной базе даёт огромный объём. Ставьте порог и включайте его на 1–2 часа, когда проблема воспроизводится.

Ошибки и падения процессов

EXCP, PROC, CONN плюс дампы. Этот набор весит мало, его можно держать неделю.

Сравнение сценариев

ЗадачаСобытияОбъёмСколько держать
Постоянный мониторингEXCP, TDEADLOCKМалыйПостоянно
Ошибки, паденияEXCP, PROC, CONN, дампыМалыйДо недели
Медленные запросыDBMSSQL/DBPOSTGRS с порогом, plansqlСреднийЧасы — сутки
БлокировкиTTIMEOUT, TDEADLOCK, TLOCK с порогомСредний1–2 часа
Полный журналВсе событияОгромныйМинуты

Полный журнал (условие <ne property="name" value=""/>) на рабочем сервере с десятками пользователей заполняет гигабайты за минуты. Включайте его только на тестовом стенде или на очень короткое время, с параметром history в 1–2 часа.

Как читать и анализировать технологический журнал

Каждая строка лога — одно событие. Начало строки выглядит так:

23:45.123456-2531000,DBMSSQL,4,process=rphost,Usr=Иванов,Sql='SELECT ...',Context='...'

Разбор по частям:

  • 23:45.123456 — минуты и секунды внутри часа (час и дата — в имени файла);
  • 2531000 — длительность в микросекундах, здесь около 2,5 секунды;
  • DBMSSQL — имя события;
  • 4 — уровень вложенности;
  • дальше — свойства через запятую: пользователь, текст запроса, контекст вызова из кода конфигурации.

Самое ценное свойство — Context. Оно показывает модуль и строку кода, откуда пришёл запрос. С ним разработчик сразу видит, какую процедуру переписывать.

Быстрый поиск в Windows

Найти все взаимоблокировки за сегодня в PowerShell:

Get-ChildItem D:\1c_logs\techlog -Recurse -Filter *.log |
    Select-String -Pattern ",TDEADLOCK," |
    Select-Object Path, Line

Быстрый поиск в Linux

Десять самых долгих запросов по полю длительности:

grep -rh ",DBPOSTGRS," /var/log/1c/techlog/ \
  | awk -F'[-,]' '{print $2, $0}' \
  | sort -rn | head -10

На больших объёмах логов удобнее специализированные инструменты: парсеры технологического журнала с загрузкой в ClickHouse или Elasticsearch, а также инструменты анализа производительности из корпоративного комплекта 1С. Для разовой проверки хватает поиска по тексту.

Многострочные запросы в логе переносятся на новые строки. Простой grep вырвет их из контекста. Для разбора SQL-текстов фильтр по первой строке события — только отправная точка.

Скрипт архивации журналов старше 7 дней

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

PowerShell для Windows

$src     = "D:\1c_logs\techlog"
$archive = "E:\1c_archive"
$limit   = (Get-Date).AddDays(-7)

$old = Get-ChildItem $src -Recurse -Filter *.log |
       Where-Object { $_.LastWriteTime -lt $limit }

if ($old) {
    $zip = Join-Path $archive ("techlog_" + (Get-Date -Format "yyyyMMdd") + ".zip")
    Compress-Archive -Path $old.FullName -DestinationPath $zip -Update
    $old | Remove-Item -Force
}

Запускайте его раз в сутки через Планировщик заданий от учётной записи с правами на обе папки. Файлы текущего часа сервер держит открытыми, но под условие «старше 7 дней» они не попадают.

Bash для Linux

#!/bin/bash
SRC=/var/log/1c/techlog
ARCH=/backup/1c_archive
mkdir -p "$ARCH"
find "$SRC" -name "*.log" -mtime +7 -print0 \
  | tar --null -czf "$ARCH/techlog_$(date +%Y%m%d).tar.gz" \
        --remove-files -T -

Добавьте в crontab строку 0 3 * * * /opt/scripts/techlog_archive.sh, чтобы архивация шла каждую ночь в 3:00.

Если history в logcfg.xml меньше 168 часов, сервер удалит файлы раньше, чем скрипт до них доберётся. Для схемы «архив через 7 дней» ставьте history не ниже 192.

Почему журнал не пишется: ошибки настройки

Диагностика: выберите симптом

Частые вопросы

Нужно ли перезапускать службу сервера 1С после изменения logcfg.xml?
Нет. Сервер перечитывает файл примерно раз в минуту. Включение, изменение и выключение журнала проходят без остановки сеансов.
Чем технологический журнал отличается от журнала регистрации?
Журнал регистрации пишет действия пользователей с данными: кто создал документ, кто вошёл в базу. Технологический журнал пишет работу платформы: запросы к СУБД, блокировки, исключения, длительности.
Можно ли писать технологический журнал только по одной базе?
Да. Добавьте в блок event условие по свойству p:processName с именем информационной базы на сервере. Тогда события других баз на этом кластере в лог не попадут.
Влияет ли технологический журнал на скорость работы 1С?
Минимальный журнал с исключениями практически незаметен. Полный журнал или TLOCK и SDBL без фильтров дают заметную нагрузку на диск и процессор, поэтому их держат включёнными недолго.
Где включить технологический журнал на клиентском компьютере?
Так же, через logcfg.xml, но в каталоге conf платформы на самом клиенте. Серверный файл действует только на процессы сервера: ragent, rmngr, rphost.