Переход на новые версии платформы 1С часто сопровождается не только расширением функционала, но и изменением внутренних механизмов хранения данных. Одной из наиболее заметных и неприятных проблем в ветке 8.3.18 (особенно в релизе 8.3.18.1616) стала проблема отображения журнала регистрации. Пользователи часто сталкиваются с тем, что вместо привычных записей в колонках «Данные» или «Комментарий» отображаются «кракозябры» или некорректные символы. В этой статье мы подробно разберем, почему это происходит и какими способами можно вернуть читаемость системным логам.
Прежде чем приступать к исправлению, проанализируем ситуацию. Начиная с версии 8.3.5, 1С ввела новый формат журнала регистрации — .lgd, который базируется на СУБД SQLite. В отличие от старого текстового формата .lgf, новый формат более производителен при больших объемах данных, но крайне чувствителен к региональным настройкам сервера и версии внутренней библиотеки SQLite.
В платформе 8.3.18 разработчики обновили движок SQLite. Выяснилось, что при определенных условиях данные начинают записываться в однобайтовой кодировке вместо UTF-8. Когда платформа пытается прочитать их как UTF-8, возникают ошибки отображения. Также возможны повреждения индексов, из-за чего парсер 1С «сдвигает» чтение строк и выдает нечитаемый текст.
Самый быстрый и надежный способ, предложенный в обсуждении, — это смена формата журнала регистрации. Многие администраторы предпочитают использовать текстовый формат .lgf, так как он проще в обслуживании и не подвержен специфическим ошибкам SQLite.
Рассмотрим пошагово, как сменить формат:
1cv8.lgf.Важное примечание: Хотя в сообщениях форума упоминается, что «конвертации нет», на самом деле платформа прекращает запись в .lgd и начинает писать в .lgf. Старые данные останутся в файле SQLite, и для их просмотра может потребоваться переключение обратно или использование внешних утилит.
Если нам критически важно остаться на новом формате .lgd, проанализируем настройки операционной системы сервера. Часто кодировка «сбивается», если System Locale (региональный стандарт системы) отличается от локали информационной базы.
Если сервер 1С работает под управлением Windows, убедимся, что для учетной записи, от которой запущена служба ragent, установлены корректные языковые параметры (Russian). Если сервер работает на Linux, необходимо проверить переменную окружения LANG. Рассмотрим пример настройки для Linux:
# Проверка текущей локали
locale
# Если локаль отличается от ru_RU.UTF-8 или en_US.UTF-8, данные в .lgd могут писаться неверно.
# Установим корректное значение в скрипте запуска службы 1С:
export LANG=ru_RU.UTF-8
После изменения настроек локали и перезапуска службы новые записи должны начать отображаться корректно, однако старые («битые») записи останутся в неверной кодировке.
Иногда кодировка в журнале регистрации «плывет» из-за повреждения страниц базы данных SQLite. Мы можем попробовать «вылечить» файл 1cv8.lgd с помощью стандартных средств работы с SQLite. Для этого нам понадобится утилита sqlite3.exe.
Выполним следующие действия:
srvinfo).
sqlite3 1cv8.lgd ".recover" | sqlite3 1cv8_fixed.lgd
После завершения процесса заменим оригинальный файл 1cv8.lgd на восстановленный 1cv8_fixed.lgd и запустим службу. Это часто помогает, если проблема вызвана поврежденными индексами в релизах 8.3.18.х.
Бывают ситуации, когда данные в самом файле журнала в порядке, но механизм отображения в платформе работает некорректно из-за накопленного кэша сеансовых данных. Разберем, как произвести полную очистку:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo\ (или аналогичный для вашей установки).snccntxt и удалим её содержимое. Это кэш сеансовых данных, который часто является причиной визуальных багов.reg_1541, исключая сами файлы журналов (1cv8.lgd) и конфигурации.Как отмечалось в обсуждении, версия 8.3.18.1616 имела ряд признанных ошибок. Разработчики 1С выпустили исправления в более поздних сборках. Если административные меры не помогают, наиболее рациональным решением будет переход на релизы 8.3.18.1900 и выше, либо на ветку 8.3.19 и далее. В этих версиях взаимодействие с SQLite было стабилизировано, а проблемы с однобайтовыми кодировками при записи логов устранены.
Подведем итог: если вы столкнулись с «кракозябрами» в журнале регистрации на 8.3.18, сначала попробуйте очистить серверный кэш. Если это не помогло, самым надежным решением будет смена формата на .lgf через Конфигуратор. Для тех, кто предпочитает оставаться на передовых технологиях, единственным верным путем будет обновление платформы до последних патчей ветки 8.3.18, где ошибки работы с SQLite официально исправлены.