Файл logcfg.xml: запускаем техжурнал на рабочем сервере 1С и не забиваем диск
Содержание
Технологический журнал 1С на сервере включается одним файлом: logcfg.xml кладут в каталог conf платформы, например C:\Program Files\1cv8\conf\ в Windows или /opt/1cv8/conf/ в Linux. Службу перезапускать не нужно: сервер 1С перечитывает файл примерно раз в минуту и сам начинает писать логи в указанную папку.
Чтобы выключить журнал, файл удаляют или переименовывают. Вся настройка — что писать, куда и сколько хранить — тоже задаётся внутри этого XML.
Что даёт технологический журнал на сервере 1С
Журнал регистрации показывает, кто и что сделал в базе. Технологический журнал показывает, как работала платформа: какие запросы шли в СУБД, сколько они длились, где возникли исключения, кто кого заблокировал.
Его включают, когда нужно ответить на вопросы, которых нет в стандартных отчётах:
- 🐢 какие запросы тормозят и из какого модуля они вызваны;
- 🔒 кто держит управляемую блокировку и почему соседние сеансы ждут;
- 💥 почему падает рабочий процесс
rphostили клиент получает «Неизвестную ошибку»; - 🔌 почему рвутся соединения и что происходит при старте сеанса;
- 📈 где утекает память, если процесс растёт до нескольких гигабайт.
Держать полный журнал включённым постоянно не стоит. Его включают под конкретную задачу, собирают данные за нужный период и сужают настройки. Минимальный постоянный журнал — исключения и взаимоблокировки — можно оставить на сервере навсегда.
Что подготовить на сервере до включения журнала
Пять минут подготовки избавляют от двух главных проблем: журнал не пишется или, наоборот, за ночь съедает весь диск.
- Отдельный диск или раздел. Под логи нужен не системный диск. Подробный журнал по SQL-запросам на нагруженном сервере легко пишет десятки гигабайт в час.
- Папка для логов. Создайте её заранее, например
D:\1c_logs\techlog. Короткий путь без пробелов проще использовать в скриптах. - Права. Пользователь, от имени которого работает служба агента сервера (по умолчанию
USR1CV8), должен иметь права на запись в эту папку. В Linux — владелец каталогаusr1cv8или права на запись для этого пользователя. - Каталог
conf. Проверьте, где он лежит. Общий каталогC:\Program Files\1cv8\conf\действует на все установленные версии платформы. Есть и каталог конкретной версии:C:\Program Files\1cv8\8.3.xx.xxxx\bin\conf\. - Редактор. Блокнот подойдёт, но удобнее 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.