Журнал регистрации 1С занял гигабайты: как его уменьшить и не потерять историю
Содержание
Почистить лог 1С проще всего в Конфигураторе: Администрирование → Журнал регистрации, затем в меню Действия → Сократить... укажите дату, до которой события удаляются, и при необходимости отметьте сохранение удалённых записей в файл. Для регулярной очистки есть пакетный режим 1cv8 DESIGNER /ReduceEventLogSize, а для сервера — удаление старых файлов журнала по расписанию.
Частая ошибка администратора клиент-серверной базы — искать журнал в SQL-базе и чистить таблицы MS SQL или PostgreSQL. Журнал регистрации там не хранится. Это файлы на рабочем сервере 1С, и уменьшать нужно именно их.
Почему журнал регистрации разрастается и когда его стоит чистить
Журнал пишет каждое событие, которое разрешено уровнем регистрации: входы и выходы, изменения данных, ошибки, фоновые задания. В базе на 50 пользователей с обменами и регламентными заданиями за год набегает 10–30 ГБ.
Чем грозит большой лог:
- 💾 заканчивается место на диске сервера или в папке файловой базы;
- 🐢 журнал открывается минутами, отбор по пользователю «висит»;
- 📦 резервные копии файловой базы становятся тяжелее, если копируют всю папку;
- ⏳ выгрузка в
.dtжурнал не включает, поэтому место на диске он отнимает «молча».
Когда чистить не нужно:
- идёт разбор инцидента — кто удалил документ, кто изменил цены. Сначала найдите ответ, потом удаляйте;
- компания по внутреннему регламенту хранит историю действий заданный срок. Тогда сначала архив, потом очистка;
- лог весит 1–2 ГБ и не мешает. Проще настроить ротацию, чем чистить вручную.
Где лежит лог 1С и как понять, что именно его пора чистить
Журнал всегда хранится в каталоге 1Cv8Log.
| Вариант базы | Где искать |
|---|---|
| Файловая | <каталог базы>\1Cv8Log — рядом с файлом 1Cv8.1CD |
| Клиент-серверная | <каталог srvinfo>\reg_1541\<идентификатор базы>\1Cv8Log |
Каталог srvinfo по умолчанию лежит в C:\Program Files\1cv8\srvinfo. Если при установке службы его переносили, смотрите параметр -d в командной строке службы агента сервера (ragent.exe) в оснастке «Службы».
Как найти папку нужной базы на сервере
Внутри reg_1541 папки названы идентификаторами, а не именами баз. Сопоставить их можно так:
- Выполните
rac cluster list— получите идентификатор кластера. - Выполните
rac infobase summary list --cluster=<идентификатор кластера>. - В выводе у каждой базы есть
infobase(идентификатор) иname(имя). Идентификатор совпадает с именем папки.
💡 Быстрый вариант без rac: отсортируйте папки в reg_1541 по размеру. Самая тяжёлая почти всегда и есть база, ради которой вы пришли.
Какой у вас формат журнала
Загляните в 1Cv8Log:
- 📄
1Cv8.lgfплюс много файлов.lgp(и индексы.lgx) — последовательный формат. Каждый.lgp— отдельный период, имя файла начинается с даты, например20260901000000.lgp; - 🗄 один большой
1Cv8.lgd— формат SQLite, все события в одном файле.
От формата зависит способ ручной очистки. Через Конфигуратор и пакетный режим работают оба.
Очистка журнала регистрации в Конфигураторе
Это штатный и самый безопасный способ: платформа сама удаляет записи и сохраняет целостность журнала.
- Запустите базу в режиме Конфигуратора под пользователем с правами администратора.
- Откройте
Администрирование → Журнал регистрации. - В окне журнала выберите
Действия → Сократить.... - Укажите дату: всё, что раньше неё, будет удалено. Например, при сроке хранения 6 месяцев на 15 октября ставьте 15 апреля.
- Если история может понадобиться, отметьте сохранение удалённых событий в файл и задайте путь на другом диске.
- Нажмите
ОКи дождитесь окончания. На журнале в 20 ГБ это может занять десятки минут.
Монопольный режим для сокращения журнала не нужен, но операция нагружает диск. В рабочее время пользователи заметят торможение — запускайте вечером.
В режиме 1С:Предприятие журнал можно только смотреть и отбирать: Администрирование → Обслуживание (ссылка «Журнал регистрации») или Все функции → Стандартные → Журнал регистрации. Команды сокращения там нет.
Сначала посмотрите, что занимает место
Перед удалением откройте журнал с отбором за последнюю неделю и сгруппируйте мысленно по событиям. Часто 80% объёма дают одно-два события:
- 🔁 обмен данными, который запускается каждую минуту и пишет «информацию»;
- ⚙️ регламентное задание с ошибкой, которое падает и перезапускается;
- 🧾 внешняя система, которая подключается через COM или HTTP-сервис сотнями сеансов в час.
Если найти источник, очистка понадобится в разы реже.
Как почистить лог 1С из командной строки
Пакетный режим Конфигуратора делает то же самое, что команда «Сократить», но без интерфейса. Его удобно ставить в планировщик заданий.
Файловая база:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /ReduceEventLogSize 2026-04-15 -saveAs "E:\LogArchive\buh_до_2026-04-15.lgf" /Out "E:\LogArchive\reduce.log"
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" /ReduceEventLogSize 2026-04-15 -saveAs "E:\LogArchive\buh_до_2026-04-15.lgf" /Out "E:\LogArchive\reduce.log"
Что значат параметры:
| Параметр | Назначение |
|---|---|
/ReduceEventLogSize ГГГГ-ММ-ДД | удалить события до указанной даты |
-saveAs <файл> | сохранить удалённые события в файл (необязательно) |
-KeepSplitting | сохранить разбиение по периодам в файле выгрузки (необязательно) |
/Out <файл> | записать результат в текстовый лог, чтобы видеть ошибки |
Номер версии платформы в пути подставьте свой. Если в базе нет пользователей, ключи /N и /P не нужны.
Дата «минус N дней» в bat-файле
Жёстко прописанная дата через месяц устареет. Проще вычислить её через PowerShell прямо в скрипте:
@echo off
for /f %%d in ('powershell -NoProfile -Command "(Get-Date).AddDays(-180).ToString('yyyy-MM-dd')"') do set CUTDATE=%%d
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" /ReduceEventLogSize %CUTDATE% -saveAs "E:\LogArchive\buh_%CUTDATE%.lgf" /Out "E:\LogArchive\reduce_%CUTDATE%.log"
💡 Пароль в bat-файле — слабое место. Заведите отдельного пользователя с правами администрирования только для обслуживания, а сам скрипт держите в папке, доступной лишь администраторам сервера.
Удаление старых файлов журнала и чистка SQLite
Ручные способы нужны, когда Конфигуратор не справляется: журнал на 100 ГБ, сокращение обрывается по таймауту, на диске не осталось места даже на временные файлы.
Последовательный формат: удаляем старые .lgp
Каждый файл .lgp хранит один период. Файлы прошлых периодов платформа уже не дописывает, поэтому их можно перенести или удалить.
- Определите срок хранения, например 180 дней.
- Перенесите старые
.lgpвместе с одноимёнными.lgxв архив или удалите. - Не трогайте
1Cv8.lgf— это словарь журнала (пользователи, компьютеры, события). Без него оставшиеся файлы не прочитать. - Не трогайте файл текущего периода — в него идёт запись.
Удаляйте только файлы прошлых периодов. Файл 1Cv8.lgf и файл текущего периода должны остаться на месте.
Формат SQLite: удаляем строки запросом
Файл 1Cv8.lgd — обычная база SQLite, события лежат в таблице EventLog. Дата в поле date хранится в своих единицах: секунды от 01.01.0001, умноженные на 10 000. Поэтому сначала проверьте пересчёт на копии.
Работать с .lgd можно только когда платформа его не держит. Для файловой базы — все пользователи вышли. Для сервера — остановлена служба агента сервера 1С, а значит, оборвутся сеансы всех пользователей всех баз на этом сервере. Делайте это в согласованное окно и только с копией файла.
Порядок:
- Остановите работу с базой (см. предупреждение выше).
- Скопируйте
1Cv8.lgdв отдельную папку. - Откройте файл утилитой
sqlite3и проверьте, что пересчёт даты даёт правдоподобный диапазон:
SELECT datetime(MIN(date)/10000 - 62135596800, 'unixepoch') AS first_event,
datetime(MAX(date)/10000 - 62135596800, 'unixepoch') AS last_event,
COUNT(*) AS events
FROM EventLog;
- Если первая и последняя даты совпадают с реальной историей базы, удалите старые записи и сожмите файл:
DELETE FROM EventLog
WHERE date < (strftime('%s', '2026-04-15') + 62135596800) * 10000;
VACUUM;
- Запустите службу и откройте журнал в Конфигураторе — события после 15 апреля должны быть на месте.
Без VACUUM файл не уменьшится: SQLite только пометит место свободным. Для VACUUM на диске нужно свободное место примерно размером с итоговый файл.
Если первый запрос вернул даты вроде 0001 или 9999 года, значит, формула в вашей версии не подходит. Не удаляйте ничего вслепую — используйте Конфигуратор или пакетный режим.
Сравнение способов
| Способ | Когда подходит | Риски |
|---|---|---|
| Конфигуратор, «Сократить» | разовая очистка, журнал до десятков ГБ | долго, нагружает диск |
Пакетный /ReduceEventLogSize | регулярная очистка по расписанию | пароль в скрипте, нужен контроль /Out |
Удаление .lgp | сервер, журнал разбит по периодам | можно задеть .lgf или текущий файл |
SQL по .lgd | огромный SQLite-журнал | нужна остановка, ошибка в дате удалит лишнее |
Ротация журнала: как сделать, чтобы лог не рос бесконечно
Очистка лечит последствия. Чтобы журнал не возвращался к прежним размерам, настройте две вещи.
Уровень регистрации и разбиение по периодам
Откройте в Конфигураторе Администрирование → Настройка журнала регистрации:
- 🎚 уровень регистрации. «Регистрировать все события» оправдан, когда нужен аудит изменений. Если аудит не нужен, уровня «ошибки и предупреждения» достаточно, а объём падает в разы;
- 📅 разделение журнала по периодам. Выберите период, например месяц. Тогда каждый месяц — отдельный файл, и старые месяцы удаляются целиком, без пересборки журнала.
Понижать уровень регистрации стоит только по согласованию с теми, кто отвечает за безопасность и аудит. После понижения изменения данных перестанут записываться, и восстановить «кто это сделал» будет нечем.
Программно уровень меняет метод УстановитьИспользованиеЖурналаРегистрации(), проверить текущий — ПолучитьИспользованиеЖурналаРегистрации().
Скрипт ротации для сервера
Когда журнал разбит по месяцам, ротация сводится к переносу старых файлов. Пример на PowerShell для планировщика заданий:
$logDir = "C:\Program Files\1cv8\srvinfo\reg_1541\<идентификатор базы>\1Cv8Log"
$archive = "E:\LogArchive\buh"
$keepDays = 180
New-Item -ItemType Directory -Force -Path $archive | Out-Null
Get-ChildItem -Path $logDir -File |
Where-Object { $_.Extension -in '.lgp', '.lgx' -and $_.LastWriteTime -lt (Get-Date).AddDays(-$keepDays) } |
Move-Item -Destination $archive -Force
Скрипт переносит только .lgp и .lgx, которые не менялись дольше 180 дней. Файл 1Cv8.lgf и текущий период под условие не попадают. Удалять архив можно отдельной задачей — например, через три года.
Как сохранить историю событий перед удалением
Архив нужен, если журнал может понадобиться для разбора спора, проверки службы безопасности или поиска старой ошибки.
Три рабочих варианта:
- Файл при сокращении. Флажок сохранения в Конфигураторе или ключ
-saveAsв пакетном режиме. Удалённые события попадают в отдельный файл. - Копия файлов периодов. Для последовательного формата скопируйте нужные
.lgp,.lgxи обязательно текущий1Cv8.lgf— без словаря архив не прочитать. - Выгрузка в XML. Метод
ВыгрузитьЖурналРегистрации()сохраняет события в XML-файл с отбором, например за один квартал:
Отбор = Новый Структура;
Отбор.Вставить("ДатаНачала", Дата(2026, 1, 1));
Отбор.Вставить("ДатаОкончания", Дата(2026, 3, 31, 23, 59, 59));
ВыгрузитьЖурналРегистрации("E:\LogArchive\buh_2026_Q1.xml", Отбор);
XML удобно разбирать сторонними средствами, но он в несколько раз тяжелее исходных файлов. Сжимайте его архиватором.
Как потом посмотреть архив
Создайте пустую файловую базу
на любой конфигурации, закройте её и подложите в её каталог 1Cv8Log архивные файлы вместе с 1Cv8.lgf. После запуска журнал этой базы покажет архивные события. Рабочую базу при этом трогать не нужно.