Синтаксис

CmdTrace <command> <options>

 

Назначение

Включает или выключает расширенную трассировку команд протокола для одного или нескольких UIN. Сервер пишет в отдельный текстовый файл входящие команды клиента и ответы сервера в том порядке, в котором они проходят через подключение.


Описание

Команда нужна для отладки и диагностики, штатно она не используется. Учитывайте, что при включении трассировки производительность сервера может уменьшаться.

 

Примеры

CmdTrace Status

Если трассировка включена, сервер показывает список UIN, маску имени файла и последний результат записи:


CmdTrace: on for 6

Log file mask: C:\ProgramData\MyChat Server\logs\2026\05\27\uin_{UIN}_cid_{CID}_client_{ClientType}.txt

Last trace: write: UIN 6, CID 12, client win32, command sc_login_finish, file C:\ProgramData\MyChat Server\logs\2026\05\27\uin_6_cid_12_client_win32.txt


Если трассировка выключена:


CmdTrace: off

Log file mask: C:\ProgramData\MyChat Server\logs\2026\05\27\uin_{UIN}_cid_{CID}_client_{ClientType}.txt

Last trace: none


После автоматического выключения в конце суток в Last trace будет указано:


Last trace: disabled automatically at day boundary

CmdTrace On 6

включить трассировку для одного пользователя;

CmdTrace On 6,7,123

включить трассировку для нескольких пользователей. В параметрах указывается только список UIN через запятую. Если UIN уже есть в списке трассировки, команда не дублирует его. В ответе сервер показывает нормализованный список и количество новых UIN:

CmdTrace: enabled for 6,7,123; added 3

CmdTrace Off 6

выключить трассировку для одного пользователя;

CmdTrace Off 6,7,123

выключить трассировку для нескольких пользователей;

CmdTrace Off all

глобально выключить трассировку для всех UIN.


Автоматическое выключение

Трассировка включается только до конца текущих локальных суток сервера. Когда дата меняется, сервер автоматически очищает список UIN для CmdTrace.


Сброс выполняется штатной суточной задачей сервера и дополнительно проверяется при обращении к CmdTrace Status, CmdTrace On, CmdTrace Off и при попытке записать очередную команду. После полуночи новые строки трассировки для старого списка UIN не пишутся.


Где лежит файл

Файл создается в той же папке, куда сервер пишет текущие текстовые протоколы за день:

C:\ProgramData\MyChat Server\logs\2026\05\27\


Имя файла протокола уникальное для клиента, состоит из UIN и его connection id (CID): uin_<UIN>_cid_<CID>_client_<ClientType>.txt

Например: uin_6_cid_12_client_win32.txt


Если к серверу подключено несколько устройств одного пользователя, или он отключается и подключается, получая новые CID, то файлов будет несколько.


Если тип клиента пустой или содержит символы, которые нельзя безопасно использовать в имени файла, сервер нормализует его. Пустой тип клиента записывается как unknown.


Формат строк протокола

Каждая строка содержит timestamp, направление, hex-код команды, текстовое имя команды и, если есть, автоинкрементный "i" из JSON payload этой же команды:


yyyy-mm-dd hh:nn:ss.zzz<TAB><direction> <hex> <command_name> [(i)]


Например:


2026-05-28 00:00:50.529        <-- 0003 cs_login (2)

2026-05-28 00:00:50.530        --> 8005 sc_login

2026-05-28 00:00:50.538        --> 8004 sc_get_all_rights

2026-05-28 00:00:50.806        <-- 000E cs_get_actions_list (3)

2026-05-28 00:00:50.806        --> 8010 sc_actions_list

2026-05-28 00:00:50.993        --> 80AE sc_just_connect_disconnect_users

2026-05-28 00:00:51.216        <-- 01F4 cs_login_done (4)

2026-05-28 00:00:51.365        --> 8013 sc_join_txt_channel

2026-05-28 00:00:51.375        --> 80AC sc_caches

2026-05-28 00:00:51.386        --> 8114 sc_web_services_info

2026-05-28 00:00:51.396        --> 8106 sc_login_finish

2026-05-28 00:00:51.406        --> 80AA sc_online_users_states

2026-05-28 00:01:21.283        <-- 000B cs_special_ping (5)

2026-05-28 00:01:24.368        <-- 0047 cs_quit (6)


Направление:


<-- : команда пришла от клиента на сервер.

--> : команда отправлена сервером клиенту.


Поле "i" берется только из JSON-поля "i" в payload текущей команды. Если в payload нет "i" или payload не JSON, в конце строки ничего не добавляется. Трассировка не пишет полный JSON payload команды. В строке остаются только timestamp, направление, hex-код, имя команды и "i", если он есть.


Производительность

Если трассировка выключена для UIN, сервер быстро выходит из обработчика и не разбирает JSON для trace. Файловая запись выполняется только для UIN из активного списка.


На время диагностики включайте трассировку точечно: для одного UIN или короткого списка UIN. После проверки ее можно выключить вручную:


CmdTrace Off all


В конце текущих суток сервер выключит активные трассировки автоматически, если вы забудете это сделать.