Logger
by egon
HTML
<div id="logDiv"></div>
CSS
* {
font:normal 12px/16px Courier New, monospace;
padding: 0;
margin: 0;
};
JavaScript
logToDiv = (function(){
var logDiv = document.getElementById("logDiv");
return function(context, args){
logDiv.innerHTML =
"<p>" + context + " : " + JSON.stringify(args) + "</p>" +
logDiv.innerHTML;
};
})();
logToDiv("ctx1", ["alpha", 123, "test"]);
logToDiv("ctx2", ["alpha", 123, "test"]);
logToDiv("ctx3", ["alpha", 123, "test"]);
function NewLogger( def ) {
var logger = {},
tree = {},
sup = {};
var reservedKeys = /^(log|enabled|enabled?|disable|isEnabled|create|leave|enter|parent|fqn|_logger|\$|)$/;
sup.$ = tree;
sup._logger = logger;
sup.fqn = "";
sup.log = function(args){
logToDiv(this.fqn, args);
};
sup.enabled = true;
sup.isEnabled = function(){
var isRoot = this._logger.__proto__ === this,
parentEnabled = (this === this.parent)
|| this.parent.isEnabled();
return this.enabled && parentEnabled;
};
sup.enable = function(){ this.enabled = true; };
sup.disable = function(){ this.enabled = false; };
sup.create = function(name, enabled){
var name = name;
var f = function(){
if( f.isEnabled() ){
f.log( arguments );
}
};
f.__proto__ = sup;
f.fqn = this.fqn + "." + name;
f.enabled = enabled;
f.parent = this;
f.enter = function(){
this.log("-->");
this._logger.__proto__ = f;
};
this[name] = f;
};
sup.leave = function(){
this.log("<--");
this._logger.__proto__ = this.parent;
}
var recurse = function( tree, def ){
for(var n in def){
if( reservedKeys.test(n) )
continue;
tree.create(n, true);
if( def[n].log ){
tree[n].log = def[n].log;
};
...