@Paradox рад что кто то пользуется )
Logger
-
@thepappo поддержка веб интерфейса заключается только в возможности отправки событий в него, а реализация их отображения это ваша задача. Что касается языка, то его надо передать через глобальную переменную в настройки логгера
-
@UserTrue я просто смотрел в документации к твоему модулю и сам код модуля. Там должен передаваться "level", но он в веб интерфейс не приходит. Приходит только type (fail, success и user), что по дефолту и так приходит. Проблема не в том, как обработать, а в том что я не могу получить данные в веб интерфейс из модуля.
Что касается языка, то его надо передать через глобальную переменную в настройки логгера
Вот это не очень понял
У меня веб интерфейс стандартный. В меню кнопки Translate to Russian и Translate to English. Попробовал в обработчики кликов по этим кнопкам засунуть изменение переменной _K, не работает =(
$(".TranslateEn").on("click", function(event) { Translate("en") Api.SetGlobalVariable("_K", "en") }) $(".TranslateRu").on("click", function(event) { Translate("ru") Api.SetGlobalVariable("_K", "ru") }) -
@UserTrue я просто смотрел в документации к твоему модулю и сам код модуля. Там должен передаваться "level", но он в веб интерфейс не приходит. Приходит только type (fail, success и user), что по дефолту и так приходит. Проблема не в том, как обработать, а в том что я не могу получить данные в веб интерфейс из модуля.
А вы какое событие слушаете? Нужно "custom-log"
Попробовал в обработчики кликов по этим кнопкам засунуть изменение переменной _K
_K - Это же не глобальная переменная. Вообще лучше вызывать функцию в которой будут устанавливаться настройки по умолчанию и через которую передавать нужные аргументы. https://wiki.bablosoft.com/web-interface/#/callbasfunction?id=bas-function-simplified-call
-
А вы какое событие слушаете? Нужно "custom-log"
Слушаю "log". "custom-log" пробовал, ничего не приходит.
_K - Это же не глобальная переменная.
Хм, ну это вроде как системная переменная баса, в которой хранится язык и ваш модуль как раз в нее смотрит. Если запускать веб интерфейс в режиме отладки, то таким макаром язык меняется. Если в скомпилированном - то нет. С функцией попробую, возможно в этом как раз дело.
-
@thepappo _K ну правильно это системная и никак не глобальная, модуль смотрит на нее если язык не указан. Но дело в том, что даже через глобальную переменную модуль не сможет отследить изменения переменной после применения настроек для модуля, поэтому лучше использовать функцию. Или же можно внести изменения в код модуля, чтобы в веб интерфейс отправлялись и русский и английский вариант, а решение что выводить будет приниматься на стороне интерфейса. До ПК доберусь так и сделаю. Просто я интерфейс пишу через вызовы функций и у меня не было таких проблем.
-
@thepappo Обновил модуль, добавил к данным поле ru и en, сделал небольшой рефакторинг кода
Api.SetEventHandler((type, data) => { if (type === 'custom-log') { console.log(data) } }){ "thread_name": "Thread #1", "action_id": '"363615980", "date": "Wed Jan 05 2022 18:00:22 GMT+0700 (RTZ 6 (", "text": "Привет", "lang": "ru", "ru": "Привет", "en": "Hello", "level": "info", "color": "" } -
@UserTrue не, не приходит событие custom-log (
/////Api event handler Api.SetEventHandler(function(EventType, EventData) { /////Display log if (EventType == "log") { let Logs = $('#Logs'); let LogLine = $("<div></div>").addClass("log-line").attr("data-log-type", EventData["type"]); let Text = $("<span></span>").text(EventData["text"]); /////Add action id if (EventData["action_id"]) { LogLine.append($("<span></span>").text("[" + EventData["action_id"] + "] ").addClass("uk-text-muted")) } /////Set color if (EventData["type"] == "success") { Text.addClass("uk-text-success") } else if (EventData["type"] == "info") { Text.addClass("uk-text-muted") } else if (EventData["type"] == "fail") { Text.addClass("uk-text-danger") } /////Remove old lines $('#Logs .log-line').slice(500).remove(); /////Append text LogLine.append(Text) Logs.append(LogLine) } if (EventType == "custom-log") { console.log(EventData) // ничего не выводится let Logs = $('#Logs'); let LogLine = $("<div></div>").addClass("log-line").attr("data-log-type", EventData["type"]); let Text = $("<span></span>").text(EventData["text"]); /////Add action id, date and thread name var MsgDate = new Date(EventData["date"]); LogLine.append($("<span></span>").text("[" + EventData["action_id"] + "] " + "[" + MsgDate + "] " + EventData["thread_name"]).addClass("uk-text-muted")) /////Set color if (EventData["type"] == "success") { Text.addClass("uk-text-success") } else if (EventData["type"] == "fail") { Text.addClass("uk-text-danger") } else if (EventData["type"] == "user") { if (EventData["level"] == "warn") { Text.addClass("text-yellow") } else if (EventData["level"] == "error") { Text.addClass("uk-text-danger") } } /////Append text LogLine.append(Text) Logs.append(LogLine) } -
-
@UserTrue спасибо большое. Есть только пожелание.
Выше в коде у меня оба события добавлены в хендлер - и log, и custom-log. Я ведь правильно понимаю, что кастомный логгер логирует только события, которые в шабе указаны в экшенах и не будет отправлять системные сообщения баса и т.п.? И по этой причине надо все равно для таких сообщений оставлять событие "log"? -
@thepappo да, за исключением сообщений об ожидании элемента, их тоже умеет перехватывать. Получается, что он не может отправить только сообщение о ожидании ресурса и завершение потока, если оно произошло не через экшены из логгера. Сообщение о ожидании ресурса не часто встречается и не особо важно как правило, а ошибки потока можно самому ловить в логике скрипта и если надо выдавать ошибку через экшен в логгере
-
-
@UserTrue тут просто проблема в том, что нельзя одновременно log и custom-log оставить, будет 2 лога выводится. А весь скрипт пихать в игнор как-то такое себе. Особенно когда и так игнор ошибок в местах где ожидается их вывод расставлен. А вывод в лог того, что не в игноре - это на случай непредведенных ошибок.
Или можно как-то отслеживать, пришел ли custom-log и не выводить в этом случае log? Просто это ведь 2 отдельных хендлера и по идее никак не сделать.
-
@thepappo я попробую добавить обёртку для ошибок, чтобы они перехвались, не знаю будет ли это работать в 100% случаев.
А слушать оба события наверное можно, но придется что-то костылить, чтобы понимать было такое событие в кастомном логе или нет -
Обновил v3.5
Улучшения касаются отправки событий в вебинтерфейс.
- Добавил перехват ошибок и успехов, которые были вызваны не через сам модуль.
На данный момент модуль перехватывает большинство сообщений за исключением сообщений для ресурсов: 1) ожидание ресурса 2) все данные были обработаны для ресурса - Событие ожидание элемента приходит с пометко level: "bas_warn"
В node.js вместо console.log следует использовать модуль
BAS_API(`logger_log({ "color": (""), "en": ("hello"), "level": ("info"), "ru": ("Привет") })`); - Добавил перехват ошибок и успехов, которые были вызваны не через сам модуль.