Журнал регистрации разросся до гигабайт: удаляем старые записи без потерь
Содержание
Почистить журнал регистрации
в 1С 8.3 проще всего в Конфигураторе: Администрирование → Настройка журнала регистрации, кнопка «Сократить», дата, до которой удалить события. Записи старше этой даты исчезнут, при желании их можно сохранить в отдельный файл. Для регулярной очистки ту же операцию запускают из командной строки ключом /ReduceEventLogSize по расписанию.
Типичная ситуация: базе бухгалтерии пять лет, резервная копия вдруг весит вдвое больше, а на диске сервера кончается место. Открываете каталог базы, а там папка 1Cv8Log на 20–40 ГБ. Это и есть журнал регистрации, и его можно безопасно сократить.
Зачем чистить журнал регистрации и когда это пора делать
Журнал регистрации пишет всё, что происходит в базе: входы и выходы пользователей, запись и удаление объектов, ошибки фоновых заданий, обновления конфигурации. Платформа сама его не обрезает. Записи копятся годами.
Признаки, что журнал пора сократить:
- 💾 папка
1Cv8Logзанимает больше места, чем сама база; - 🐢 форма журнала в пользовательском режиме открывается минутами, отбор по пользователю «висит»;
- 📦 архивация каталога файловой базы идёт заметно дольше, чем раньше;
- 🔁 в журнале тысячи одинаковых ошибок одного регламентного задания в сутки.
Журнал нужен для разборов: кто удалил документ, кто поменял цену, почему упал обмен. Поэтому чистят его не «под ноль», а по сроку. Разумный ориентир для бухгалтерской базы — хранить последние 6–12 месяцев, а более старые записи выгружать в архив.
Не путайте журнал регистрации с технологическим журналом (он настраивается файлом logcfg.xml и пишется в отдельный каталог) и с регистрацией изменений в планах обмена. Это три разных механизма, и чистятся они по-разному.
Где лежит журнал и в каком он формате
Прежде чем удалять, посмотрите, что именно лежит на диске. От формата зависит, какие способы подойдут.
Расположение:
| Вариант базы | Где искать |
|---|---|
| Файловая | каталог базы → папка 1Cv8Log |
| Клиент-серверная | каталог кластера srvinfo → reg_1541 → папка с идентификатором базы → 1Cv8Log |
У серверной базы каталог srvinfo по умолчанию находится в папке установки сервера, часто это C:\Program Files\1cv8\srvinfo. Папки баз внутри reg_1541 названы GUID-ами. Чтобы понять, какая папка чья, выполните на сервере:
rac cluster list
rac infobase summary list --cluster=<id_кластера>
Вторая команда покажет идентификатор и имя каждой базы. Идентификатор совпадает с именем папки.
Формат журнала:
Что видите в 1Cv8Log | Формат | Особенность |
|---|---|---|
1Cv8.lgf и много файлов .lgp (иногда рядом .lgx) | последовательный | журнал разбит на файлы по периодам, старые файлы легко архивировать |
один файл 1Cv8.lgd | SQLite | всё в одном файле, удалять записи — только средствами платформы |
В последовательном формате 1Cv8.lgf — это словарь: в нём хранятся имена пользователей, компьютеров, метаданных. Файлы .lgp ссылаются на него. Не удаляйте 1Cv8.lgf, если хотите читать оставшиеся записи — без словаря они превратятся в набор непонятных кодов.
Анализ журнала регистрации перед удалением
Сначала разберитесь, чем журнал забит. Иначе через полгода он снова вырастет до тех же размеров.
- Откройте журнал в пользовательском режиме. В БП 3.0 и ЗУП 3.1 это
Администрирование → Обслуживание → Журнал регистрации. В Конфигураторе —Администрирование → Журнал регистрации. - Поставьте отбор за последние сутки и посмотрите, каких событий больше всего.
- Отдельно проверьте отбор по важности «Ошибка». Часто там одно и то же регламентное задание падает каждую минуту.
- Для последовательного формата посмотрите размеры файлов
.lgpпо датам. Резкий скачок размера подскажет, с какого дня что-то изменилось.
Частые «пожиратели места»:
- 🔄 регламентное задание с ошибкой, которое перезапускается по расписанию каждую минуту;
- 📝 уровень «Регистрировать все события» — тогда в журнал идут и информационные записи, и примечания;
- 🔗 обмены и загрузки, которые пишут в журнал каждое изменение объекта;
- 👥 веб-клиент или интеграция, которая открывает и закрывает сеанс на каждый запрос.
Если причина в ошибке задания — сначала почините задание или отключите его. Чистить журнал, который продолжает заполняться ошибками, бессмысленно.
Нужна история для проверки или спора с сотрудником? Перед удалением выгрузите нужный отрезок. В форме журнала в Конфигураторе есть сохранение в файл, а при сокращении журнала можно сразу сохранить удаляемые события в отдельный файл.
Как почистить журнал регистрации вручную через Конфигуратор
Это основной и самый безопасный способ. Подходит для обоих форматов и для обоих вариантов базы.
- Сделайте резервную копию: для файловой базы — копию каталога, для серверной — выгрузку
.dtили бэкап СУБД. Журнал серверной базы в бэкап СУБД не входит, поэтому его папку при необходимости копируйте отдельно. - Откройте базу в режиме Конфигуратора под пользователем с правами администратора.
- Выберите
Администрирование → Настройка журнала регистрации. - Нажмите «Сократить».
- Укажите дату: все события раньше неё будут удалены.
- Если старые записи нужны для архива — отметьте сохранение удаляемых событий в файл и укажите путь.
- Подтвердите и дождитесь окончания. На журнале в десятки гигабайт это может занять от нескольких минут до часа.
В том же окне настраиваются две вещи, которые влияют на рост журнала:
- Уровень регистрации. Для рабочей бухгалтерской базы обычно хватает уровня «ошибки и предупреждения» или «ошибки, предупреждения и информация». «Все события» включают на время расследования.
- Периодичность разделения (для последовательного формата). Разбивка по месяцам или дням упрощает архивирование: каждый период — отдельный файл.
Если поставить «Не регистрировать», журнал перестанет вестись совсем. Тогда при спорной ситуации вы не узнаете, кто и когда удалил документ. Так делать не стоит.
Автоматическая очистка журнала регистрации по расписанию
В типовых конфигурациях нет штатного регламентного задания, которое удаляет старые записи журнала. Автоматизируют очистку снаружи: запуском Конфигуратора в пакетном режиме по расписанию Windows или cron.
Ключ пакетного режима — /ReduceEventLogSize. Он делает то же, что кнопка «Сократить»: удаляет события до указанной даты (формат ГГГГ-ММ-ДД). Дополнительно можно указать -saveAs <файл>, чтобы сохранить удаляемые записи, и -KeepSplitting, чтобы сохранить разбиение на файлы по периодам.
Пример скрипта PowerShell, который оставляет последние 6 месяцев журнала серверной базы:
$exe = "C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
$date = (Get-Date).AddMonths(-6).ToString("yyyy-MM-dd")
$log = "D:\Scripts\reduce_eventlog.txt"
& $exe DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" `
/ReduceEventLogSize $date -KeepSplitting `
/Out $log /DisableStartupDialogs
Для файловой базы вместо /S "srv1c\buh" укажите /F "D:\Bases\Buh". Номер версии платформы в пути замените на свой.
Перед тем как ставить скрипт в расписание, прогоните его вручную на копии базы или на тестовой базе. Проверьте три вещи: файл из /Out пустой или без ошибок, размер папки 1Cv8Log уменьшился, а в журнале остались записи только за последние полгода. Если что-то пошло не так, вы увидите это на копии, а не на рабочей базе.
Если у вас несколько баз, не копируйте скрипт для каждой. Вынесите строку подключения в параметр и вызывайте один скрипт с разными базами по очереди, а не одновременно: параллельное сокращение нескольких больших журналов сильно нагружает диск.
Дальше скрипт ставится в Планировщик заданий Windows, например на ночь с субботы на воскресенье раз в месяц. Результат смотрите в файле, который задан ключом /Out.
Пароль в открытом виде в скрипте — риск. Заведите для обслуживания отдельного пользователя с правом администрирования и закройте доступ к папке со скриптами.
Для последовательного формата есть и второй вариант: переносить в архив старые файлы .lgp целиком. Текущий файл периода платформа держит открытым, а прошлые — нет. Однако переносить их вслепую не стоит: средства платформы надёжнее, а ручные операции с файлами оставляйте на случай, когда Конфигуратор недоступен.
Особенности очистки журнала в файловой и клиент-серверной базе
Порядок действий через Конфигуратор одинаков, а различаются права, путь и «план Б».
| Файловая база | Клиент-серверная база | |
|---|---|---|
| Где журнал | 1Cv8Log в каталоге базы | srvinfo\reg_1541\<GUID>\1Cv8Log на рабочем сервере |
| Кто может чистить | администратор базы | администратор базы; к файлам — только администратор сервера |
| Входит ли в бэкап | да, если копируете весь каталог | нет, в бэкап СУБД не попадает |
| Радикальный способ | при выходе всех пользователей переименовать папку 1Cv8Log | остановить службу сервера 1С и работать с файлами |
Радикальный способ для файловой базы. Когда все пользователи вышли, папку 1Cv8Log можно переименовать, например в 1Cv8Log_old. При следующем запуске платформа создаст новую пустую папку. Старую заархивируйте или удалите, когда убедитесь, что база работает.
Радикальный способ для серверной базы. Работать с файлами журнала на сервере напрямую можно только при остановленной службе «Агент сервера 1С:Предприятия». Остановка службы оборвёт сеансы всех пользователей всех баз этого кластера. Делайте это вне рабочего времени и предупредите людей заранее. Для одной базы проще и безопаснее сократить журнал через Конфигуратор.
Если журнал серверной базы мешает только по месту на системном диске, перенесите каталог кластера на отдельный диск при переустановке службы. Это решает проблему надолго, но требует планового окна.
Как держать размер журнала под контролем
Разовая чистка помогает на полгода. Чтобы не возвращаться к проблеме, настройте три вещи.
1. Контроль размера папки. Короткий скрипт показывает, сколько занимает журнал каждой базы на сервере. Его удобно запускать раз в неделю тем же Планировщиком заданий:
$root = "C:\Program Files\1cv8\srvinfo\reg_1541"
Get-ChildItem $root -Directory | ForEach-Object {
$logDir = Join-Path $_.FullName "1Cv8Log"
if (Test-Path $logDir) {
$size = (Get-ChildItem $logDir -Recurse -File |
Measure-Object Length -Sum).Sum
"{0} {1:N1} ГБ" -f $_.Name, ($size / 1GB)
}
}
GUID в выводе сопоставьте с именами баз по команде rac infobase summary list. Если журнал одной базы за неделю вырос на гигабайт, а у соседних почти не меняется, ищите в нём повторяющиеся ошибки.
2. Разумный уровень регистрации. Рабочей базе не нужен уровень «все события» постоянно. Включайте его на время разбора инцидента и возвращайте обратно. Уровень можно менять и программно — методом УстановитьИспользованиеЖурналаРегистрации() из обработки администратора, но для большинства баз хватает окна настройки в Конфигураторе.
3. Регламент хранения. Договоритесь с главным бухгалтером и службой безопасности, сколько месяцев истории держать в базе. Запишите срок в регламент обслуживания и выставьте ту же глубину в скрипте с /ReduceEventLogSize. Тогда при спорной ситуации никто не будет удивлён, что записи двухлетней давности лежат только в архиве.