Все события, происходящие при работе кассового ПО, записываются программой в файлы журналов или лог-файлы, которые впоследствии можно использовать для анализа сбоев, получения статистики, расследования инцидентов. 

Лог – это текстовый файл, в котором каждому событию соответствует одна строка со временем и некоторыми дополнительными сведениями. Ведение лог-файлов позволяет восстановить картину неполадки либо последовательность действий, которая к ней привела. Для удобства пользователей лог-файлы размещаются в одной директории.

Для текущей смены лог-файлы сохраняются в директорию /linuxcash/logs/current.

Помимо лог-файлов сохраняются образы всех чеков, которые были закрыты в течении смены, а также журналы регистрации в ККМ сумм для данных документов.

  • Файлы с образами чеков сохраняются в директорию /linuxcash/logs/current/documents и именуются по правилу <номер_смены>-<номер_чека>.img, здесь номер_смены – номер текущей смены, номер_чека – номер завершенного чека.
  • Журналы регистрации сохраняются в директорию /linuxcash/logs/current/trs и именуются как <номер_чека>.<метка_времени>, здесь: номер_чека – номер завершенного чека, метка_времени – текущее время на момент начала регистрации в ККМ в формате unixtime.
ДиректорияСодержимое
documentsОбразы закрытых чеков
trsЖурнал регистрации в ККМ текущего документа (файл присутствует, если произошло аварийное завершение работы программы во время печати чека)
trs/commitedЖурналы успешно зарегистрированных документов в ККМ
trs/canceledЖурналы документов, которые не были зарегистрированы в ККМ
trs/criticalЖурналы регистрации в ККМ, содержащие критические ошибки, возникшие при регистрации

Для упрощения разбора информации "задним" числом при закрытии смены выполняется ротация директорий с лог-файлами. Таким образом, для каждой смены в каталоге /linuxcash/logs/cashlogs/ создается директория, название которой соответствует номеру смены. 

Уровень детализации записей в лог-файлах

Правила ведения логов, события, которые подлежат записи, их подробность и полнота задаются в файле /linuxcash/cash/conf/Artix/artix.conf. Используемая подсистема ведения логов позволяет гибко настраивать виды журналов, объединять данные в один файл, распределять данные по нескольким файлам или выводить информацию в консоль. После установки кассового ПО логирование всех модулей осуществляется по умолчанию на уровне INFO. Запись логов ведется в несколько файлов. Наиболее важные из них:

ФайлОписание
terminal.logОсновной лог-файл кассовой программы, содержит большинство информации о процессе работы

frdriver.log

Лог драйвера фискального регистратора
scale.logЛог драйвера прикассовых весов
reader.logЛог драйвера считывателя

Допускается использование одного из уровней: 

  • TRACE,
  • DEBUG,
  • INFO,
  • WARN,
  • ERROR.

Самый детальный уровень называется TRACE, самый строгий – ERROR. В зависимости от выбранного уровня в лог записывается информация, которая соответствует уровню, или строже.

УровеньОписание
ERRORОшибка в приложении, приложение может работать дальше без возникновения проблем, причина проблемы может состоять в неправильных входных данных или доступе к внешним сервисам
WARNНекритичная ошибка, приложение может работать дальше без возникновения проблем, вероятно одна из функций приложения дала сбой, который может быть исправлен
INFOВажная информация о работе приложения, например, запуск/остановка приложения, использование конфигурационных файлов или аутентификация пользователя в системе
DEBUGОтладочная информация работы приложения, например, технические данные, полученные при работе с внешними системами, или информация о вызове методов объектов, включая список параметров
TRACEТрассировка выполнения приложения, например, информация о вызываемых методах и времени их работы, информация о времени вызова внешних сервисов.

Для изменения уровня детализации достаточно установить требуемый уровень первым параметром требуемого логгера.

Пример настройки записи информации в файл terminal.log
Properties\log4j.appender.term=org.apache.log4j.FileAppender
Properties\log4j.appender.term.file=/linuxcash/logs/current/terminal.log
Properties\log4j.appender.term.appendFile=true
Properties\log4j.appender.term.layout=org.apache.log4j.TTCCLayout
Properties\log4j.appender.term.layout.DateFormat=ISO8601
Properties\log4j.additivity.terminal=false
Properties\log4j.logger.terminal="INFO, term"

Ротация данных после закрытия смены

Запуск процесса ротации файлов осуществляется после закрытия смены при помощи shell-скрипта /linuxcash/cash/bin/oncloseshift.sh, выполнение которого настраивается через макрос «Закрытие смены», как вызов внешнего скрипта.

За реорганизацию файлов отвечает модуль artix-maint-mysql. Журналы событий за текущую смену переименовываются в соответствии с правилами ротации, заданными в разделе shiftly.

Остановка работы кассы при ошибке логирования 

Остановка логирования при работе кассы – серьезная проблема, она может быть следствием прекращения правильной работы кассы. Такие ситуации возможны при непредвиденном отключении электроэнергии в процессе функционирования кассы, а также при проблемах с комплектующими.

При возникновении ошибки, связанной с прекращением логирования, программа остановит работу и выдаст сообщение:

Необходимо восстановить возможность логирования данных, после чего нажать ОК - программа перезапустится в нормальном режиме.

Вывод информации о внутренних процессах

Начиная с версии 4.6.176 реализован вывод информации о внутренних процессах в файл trace.txt.

Вывод информации о внутренних процессах кассового ПО Artix в файл /linuxcash/logs/current/trace.txt выполняется при:

  • перезагрузке кассы с помощью команд reboot, pkill artix-gui, shutdown -r now;
  • наличии файл-флага /linuxcash/cash/data/tmp/tracestart.
Пример информации, записываемой в файл trace.txt
11.02.2021 11:09:28 смена: 104, чек: 2
контексты: mainmenu authentication
выполняется: COMMAND_WHATEVER
формы: AuthenticationForm SomeAwesomeForm
top - 11:09:28 up  2:45,  4 users,  load average: 0.15, 0.07, 0.06
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 97.9 id,  1.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1024072 total,   780808 used,   243264 free,   109820 buffers
KiB Swap:  1000444 total,      824 used,   999620 free.   448384 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1840 root      20   0   69376  20636   8344 S   6.5  2.0   0:27.05 python

фреймы стека:
 /linuxcash/cash/lib/libArtix.so(_ZN13SignalHandler8getTraceEv+0x60) [0xb7227870]
 /linuxcash/cash/lib/libgui.so(_ZNK11TraceSystem18collectInformationEv+0x211) [0xb6a0df91]
 /linuxcash/cash/lib/libgui.so(_ZN11TraceSystem8onChangeERK7QString+0x2a2) [0xb6a0dcd2]
 /linuxcash/cash/lib/libgui.so(_ZN9QtPrivate11FunctorCallINS_11IndexesListIJLi0EEEENS_4ListIJRK7QStringEEEvM11TraceSystemFvS6_EE4callESA_PS8_PPv+0x85) [0xb6a0fa85]
 /linuxcash/cash/lib/libgui.so(_ZN9QtPrivate15FunctionPointerIM11TraceSystemFvRK7QStringEE4callINS_4ListIJS4_EEEvEEvS6_PS1_PPv+0x63) [0xb6a0f9f3]
 /linuxcash/cash/lib/libgui.so(_ZN9QtPrivate11QSlotObjectIM11TraceSystemFvRK7QStringENS_4ListIJS4_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb+0xbd) [0xb6a0f90d]
 /opt/Qt/lib/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectiiPPv+0xa4c) [0xad407b5c]
 /opt/Qt/lib/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x37) [0xad407107]
 /opt/Qt/lib/libQt5Core.so.5(+0x1cf357) [0xad352357]
 /opt/Qt/lib/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectiiPPv+0xae8) [0xad407bf8]
 /opt/Qt/lib/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x37) [0xad407107]
 /opt/Qt/lib/libQt5Core.so.5(+0x1cf5f8) [0xad3525f8]
 /opt/Qt/lib/libQt5Core.so.5(+0x1d2f0f) [0xad355f0f]
 /opt/Qt/lib/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectiiPPv+0xae8) [0xad407bf8]
 /opt/Qt/lib/libQt5Core.so.5(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x37) [0xad407107]
 /opt/Qt/lib/libQt5Core.so.5(_ZN15QSocketNotifier5eventEP6QEvent+0x27d) [0xad40f41d]
 /opt/Qt/lib/libQt5Widgets.so.5(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0x100) [0xade6fae0]
  • No labels