Mercurial > pub > ImplabJs
view core/src/js/log/trace.js @ 34:27e8e9e38e07 default tip
Слияние
author | nickolay |
---|---|
date | Wed, 05 Jun 2019 20:44:15 +0300 |
parents | acdcdf1a8d21 |
children |
line wrap: on
line source
define(["../text/format"], function (format) { 'use strict'; var listeners = []; var channels = {}; var Trace = function (name) { this.name = name; this._subscribers = []; }; Trace.prototype.debug = function () { if (Trace.level >= 4) this.notify("debug", format.apply(null, arguments)); }; Trace.prototype.log = function () { if (Trace.level >= 3) this.notify("log", format.apply(null, arguments)); }; Trace.prototype.warn = function () { if (Trace.level >= 2) this.notify("warn", format.apply(null, arguments)); }; Trace.prototype.error = function () { if (Trace.level >= 1) this.notify("error", format.apply(null, arguments)); }; Trace.prototype.notify = function (name, msg) { var me = this; me._subscribers.forEach(function (cb) { cb(me, name, msg); }); }; Trace.prototype.subscribe = function (cb) { this._subscribers.push(cb); }; Trace.prototype.toString = function () { return this.name; }; Trace.createChannel = function (type, name, cb) { var chId = name; if (channels[chId]) return channels[chId]; var channel = new type(chId); channels[chId] = channel; Trace._onNewChannel(chId, channel); cb(channel); }; Trace._onNewChannel = function (chId, ch) { listeners.forEach(function (listener) { listener(chId, ch); }); }; Trace.on = function (filter, cb) { if (arguments.length == 1) { cb = filter; filter = undefined; } var d, test; if (filter instanceof RegExp) { test = function (chId) { return filter.test(chId); }; } else if (filter instanceof Function) { test = filter; } else if (filter) { test = function (chId) { return chId == filter; }; } if (test) { d = function(chId, ch) { if(test(chId)) ch.subscribe(cb); }; } else { d = function(chId, ch) { ch.subscribe(cb); }; } listeners.push(d); for(var chId in channels) d(chId,channels[chId]); }; Trace.load = function (id, require, cb) { if (id) Trace.createChannel(Trace, id, cb); else if (require.module && require.module.mid) Trace.createChannel(Trace, require.module.mid, cb); else require(['module'], function (module) { Trace.createChannel(Trace, module && module.id, cb); }); }; Trace.dynamic = true; Trace.level = 4; return Trace; });