27.03.2015

JSSDK: logger и Error.stack

Логирование

Логирование

			// Добавляем запись в логер
			logger.add("метка", { /* какие-то даныне */ });
		

Логирование

			// На самом деле в лог будет добавлен экземляр logger.Entry
			{
				#! type: "log", // Тип записи `scope` или `log`
				#! label: "...", // какая-то метка
				#! args: ..., // какие-то даныне
				#!+ meta: {
					#! fn: "add", // имя функции
					#! file: "module.js", // файл в которым был
					#! line: 123, // строка в которой был вызван лог
					#! column: 1 // символ
				#!- }
			}
		

Scope

Scope

			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")
			};
		

Или scope

			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);
						}
					#!- );
				}
			};
		

Scope

			// Где-то в коде
			$("#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);
			});
		

Минусы

Да, я знаю, что много «лишней» информации, но это только пока

Эээ, это всё?

Ха-ха, нет!

logger.mailTo("trash@rubaxa.org")
+
Error.stack

Error.stack

Это веб-интерфейс для анализа стека ошибки, а теперь и лога.

The End