Журнал регистрации 1С занял гигабайты: как его уменьшить и не потерять историю

· 9 мин

Содержание

Почистить лог 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 папки названы идентификаторами, а не именами баз. Сопоставить их можно так:

  1. Выполните rac cluster list — получите идентификатор кластера.
  2. Выполните rac infobase summary list --cluster=<идентификатор кластера>.
  3. В выводе у каждой базы есть infobase (идентификатор) и name (имя). Идентификатор совпадает с именем папки.

💡 Быстрый вариант без rac: отсортируйте папки в reg_1541 по размеру. Самая тяжёлая почти всегда и есть база, ради которой вы пришли.

Какой у вас формат журнала

Загляните в 1Cv8Log:

  • 📄 1Cv8.lgf плюс много файлов .lgp (и индексы .lgx) — последовательный формат. Каждый .lgp — отдельный период, имя файла начинается с даты, например 20260901000000.lgp;
  • 🗄 один большой 1Cv8.lgd — формат SQLite, все события в одном файле.

От формата зависит способ ручной очистки. Через Конфигуратор и пакетный режим работают оба.

Очистка журнала регистрации в Конфигураторе

Это штатный и самый безопасный способ: платформа сама удаляет записи и сохраняет целостность журнала.

  1. Запустите базу в режиме Конфигуратора под пользователем с правами администратора.
  2. Откройте Администрирование → Журнал регистрации.
  3. В окне журнала выберите Действия → Сократить....
  4. Укажите дату: всё, что раньше неё, будет удалено. Например, при сроке хранения 6 месяцев на 15 октября ставьте 15 апреля.
  5. Если история может понадобиться, отметьте сохранение удалённых событий в файл и задайте путь на другом диске.
  6. Нажмите ОК и дождитесь окончания. На журнале в 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 хранит один период. Файлы прошлых периодов платформа уже не дописывает, поэтому их можно перенести или удалить.

  1. Определите срок хранения, например 180 дней.
  2. Перенесите старые .lgp вместе с одноимёнными .lgx в архив или удалите.
  3. Не трогайте 1Cv8.lgf — это словарь журнала (пользователи, компьютеры, события). Без него оставшиеся файлы не прочитать.
  4. Не трогайте файл текущего периода — в него идёт запись.

Удаляйте только файлы прошлых периодов. Файл 1Cv8.lgf и файл текущего периода должны остаться на месте.

Формат SQLite: удаляем строки запросом

Файл 1Cv8.lgd — обычная база SQLite, события лежат в таблице EventLog. Дата в поле date хранится в своих единицах: секунды от 01.01.0001, умноженные на 10 000. Поэтому сначала проверьте пересчёт на копии.

Работать с .lgd можно только когда платформа его не держит. Для файловой базы — все пользователи вышли. Для сервера — остановлена служба агента сервера 1С, а значит, оборвутся сеансы всех пользователей всех баз на этом сервере. Делайте это в согласованное окно и только с копией файла.

Порядок:

  1. Остановите работу с базой (см. предупреждение выше).
  2. Скопируйте 1Cv8.lgd в отдельную папку.
  3. Откройте файл утилитой 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;
  1. Если первая и последняя даты совпадают с реальной историей базы, удалите старые записи и сожмите файл:
DELETE FROM EventLog
WHERE date < (strftime('%s', '2026-04-15') + 62135596800) * 10000;

VACUUM;
  1. Запустите службу и откройте журнал в Конфигураторе — события после 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 и текущий период под условие не попадают. Удалять архив можно отдельной задачей — например, через три года.

Как сохранить историю событий перед удалением

Архив нужен, если журнал может понадобиться для разбора спора, проверки службы безопасности или поиска старой ошибки.

Три рабочих варианта:

  1. Файл при сокращении. Флажок сохранения в Конфигураторе или ключ -saveAs в пакетном режиме. Удалённые события попадают в отдельный файл.
  2. Копия файлов периодов. Для последовательного формата скопируйте нужные .lgp, .lgx и обязательно текущий 1Cv8.lgf — без словаря архив не прочитать.
  3. Выгрузка в XML. Метод ВыгрузитьЖурналРегистрации() сохраняет события в XML-файл с отбором, например за один квартал:
Отбор = Новый Структура;
Отбор.Вставить("ДатаНачала", Дата(2026, 1, 1));
Отбор.Вставить("ДатаОкончания", Дата(2026, 3, 31, 23, 59, 59));
ВыгрузитьЖурналРегистрации("E:\LogArchive\buh_2026_Q1.xml", Отбор);

XML удобно разбирать сторонними средствами, но он в несколько раз тяжелее исходных файлов. Сжимайте его архиватором.

Как потом посмотреть архив

Создайте пустую файловую базу на любой конфигурации, закройте её и подложите в её каталог 1Cv8Log архивные файлы вместе с 1Cv8.lgf. После запуска журнал этой базы покажет архивные события. Рабочую базу при этом трогать не нужно.

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

Удалит ли очистка журнала регистрации документы или данные базы?
Нет. Журнал хранит только историю событий. Документы, справочники и остатки не меняются.
Можно ли просто удалить всю папку 1Cv8Log?
Для файловой базы при отсутствии пользователей платформа создаст журнал заново, но вся история пропадёт без возможности восстановления. Для сервера так делать не стоит: безопаснее сокращение через Конфигуратор.
Почему после сокращения файл .lgd не уменьшился?
SQLite освобождает место внутри файла, но не возвращает его на диск. Размер файла уменьшится после команды VACUUM при остановленной работе с базой.
Попадает ли журнал регистрации в выгрузку .dt?
Нет. Выгрузка информационной базы журнал не содержит. Чтобы перенести историю на другой сервер, копируйте каталог 1Cv8Log отдельно.
Как часто чистить лог 1С?
При ротации по периодам — раз в месяц автоматически. Без ротации ориентируйтесь на свободное место: когда журнал превышает 10–20% диска, пора сокращать.