Консольная команда MyChat Server: CmdTrace
Синтаксис
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 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
В конце текущих суток сервер выключит активные трассировки автоматически, если вы забудете это сделать.