JSSDK: logger и Error.stack
// Добавляем запись в логер
logger.add("метка", { /* какие-то даныне */ });
// На самом деле в лог будет добавлен экземляр logger.Entry
{
#! type: "log", // Тип записи `scope` или `log`
#! label: "...", // какая-то метка
#! args: ..., // какие-то даныне
#!+ meta: {
#! fn: "add", // имя функции
#! file: "module.js", // файл в которым был
#! line: 123, // строка в которой был вызван лог
#! column: 1 // символ
#!- }
}
var model = {
#!+ fetch: function (query) {
#! logger.add("data", query);
#!+ return logger.wrap(fetch("path/to", { body: query })).then(
function (response) {
#!+ logger.add("success", response.status);
#!- return response.json();
},
function (response) {
#!+ logger.add("fail", response.status);
#!- return Promise.rejected(response.status);
}
#!- );
#!- }.logger("model.fetch")
};
var model = {
fetch: function (query) {
#! var logScope = logger.scope("model.fetch", query);
#!+ return logScope.wrap(fetch("path/to", { body: query })).then(
function (response) {
#!+ logger.add("success", response.status);
#!- return response.json();
},
function (response) {
#!+ logger.add("fail", response.status);
#!- return Promise.rejected(response.status);
}
#!- );
}
};
// Где-то в коде
$("#button").on("click", function () {
#!+ model.fetch({ offset: 0, limit: 20 }).then(function () {
#! logger.add("Model fetched");
#!- });
});
Folder.findOne(123).then(function (folder) {
#! logger.add("folder.loaded", folder.id);
#!+ // А сейчас мы будем делать что-то не хорошое
#!- folder.save("name", "Wow!");
#!+ // или
setTimeout(function () {
folder.remove();
#!- }, 10);
});
Да, я знаю, что много «лишней» информации, но это только пока
Это веб-интерфейс для анализа стека ошибки, а теперь и лога.