/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['logging/index.js']) {
  _$jscoverage['logging/index.js'] = [];
  _$jscoverage['logging/index.js'][1] = 0;
  _$jscoverage['logging/index.js'][6] = 0;
  _$jscoverage['logging/index.js'][7] = 0;
  _$jscoverage['logging/index.js'][11] = 0;
  _$jscoverage['logging/index.js'][12] = 0;
  _$jscoverage['logging/index.js'][13] = 0;
  _$jscoverage['logging/index.js'][14] = 0;
  _$jscoverage['logging/index.js'][15] = 0;
  _$jscoverage['logging/index.js'][19] = 0;
  _$jscoverage['logging/index.js'][20] = 0;
  _$jscoverage['logging/index.js'][21] = 0;
  _$jscoverage['logging/index.js'][22] = 0;
  _$jscoverage['logging/index.js'][23] = 0;
  _$jscoverage['logging/index.js'][26] = 0;
  _$jscoverage['logging/index.js'][30] = 0;
  _$jscoverage['logging/index.js'][34] = 0;
  _$jscoverage['logging/index.js'][38] = 0;
  _$jscoverage['logging/index.js'][42] = 0;
  _$jscoverage['logging/index.js'][43] = 0;
  _$jscoverage['logging/index.js'][44] = 0;
  _$jscoverage['logging/index.js'][45] = 0;
  _$jscoverage['logging/index.js'][46] = 0;
  _$jscoverage['logging/index.js'][47] = 0;
  _$jscoverage['logging/index.js'][48] = 0;
  _$jscoverage['logging/index.js'][49] = 0;
  _$jscoverage['logging/index.js'][50] = 0;
  _$jscoverage['logging/index.js'][52] = 0;
  _$jscoverage['logging/index.js'][53] = 0;
  _$jscoverage['logging/index.js'][55] = 0;
  _$jscoverage['logging/index.js'][56] = 0;
  _$jscoverage['logging/index.js'][60] = 0;
  _$jscoverage['logging/index.js'][62] = 0;
  _$jscoverage['logging/index.js'][66] = 0;
  _$jscoverage['logging/index.js'][80] = 0;
  _$jscoverage['logging/index.js'][81] = 0;
  _$jscoverage['logging/index.js'][82] = 0;
  _$jscoverage['logging/index.js'][87] = 0;
  _$jscoverage['logging/index.js'][88] = 0;
  _$jscoverage['logging/index.js'][89] = 0;
  _$jscoverage['logging/index.js'][95] = 0;
  _$jscoverage['logging/index.js'][96] = 0;
  _$jscoverage['logging/index.js'][97] = 0;
  _$jscoverage['logging/index.js'][98] = 0;
  _$jscoverage['logging/index.js'][99] = 0;
  _$jscoverage['logging/index.js'][109] = 0;
  _$jscoverage['logging/index.js'][110] = 0;
  _$jscoverage['logging/index.js'][115] = 0;
  _$jscoverage['logging/index.js'][116] = 0;
  _$jscoverage['logging/index.js'][117] = 0;
  _$jscoverage['logging/index.js'][118] = 0;
  _$jscoverage['logging/index.js'][119] = 0;
  _$jscoverage['logging/index.js'][122] = 0;
  _$jscoverage['logging/index.js'][126] = 0;
  _$jscoverage['logging/index.js'][130] = 0;
  _$jscoverage['logging/index.js'][136] = 0;
  _$jscoverage['logging/index.js'][138] = 0;
  _$jscoverage['logging/index.js'][142] = 0;
  _$jscoverage['logging/index.js'][144] = 0;
  _$jscoverage['logging/index.js'][227] = 0;
  _$jscoverage['logging/index.js'][233] = 0;
  _$jscoverage['logging/index.js'][234] = 0;
  _$jscoverage['logging/index.js'][235] = 0;
  _$jscoverage['logging/index.js'][236] = 0;
  _$jscoverage['logging/index.js'][237] = 0;
  _$jscoverage['logging/index.js'][238] = 0;
  _$jscoverage['logging/index.js'][239] = 0;
  _$jscoverage['logging/index.js'][241] = 0;
  _$jscoverage['logging/index.js'][243] = 0;
  _$jscoverage['logging/index.js'][252] = 0;
  _$jscoverage['logging/index.js'][261] = 0;
  _$jscoverage['logging/index.js'][270] = 0;
  _$jscoverage['logging/index.js'][279] = 0;
  _$jscoverage['logging/index.js'][288] = 0;
  _$jscoverage['logging/index.js'][297] = 0;
  _$jscoverage['logging/index.js'][307] = 0;
  _$jscoverage['logging/index.js'][308] = 0;
  _$jscoverage['logging/index.js'][309] = 0;
  _$jscoverage['logging/index.js'][310] = 0;
  _$jscoverage['logging/index.js'][311] = 0;
  _$jscoverage['logging/index.js'][312] = 0;
  _$jscoverage['logging/index.js'][313] = 0;
  _$jscoverage['logging/index.js'][315] = 0;
  _$jscoverage['logging/index.js'][316] = 0;
  _$jscoverage['logging/index.js'][323] = 0;
  _$jscoverage['logging/index.js'][324] = 0;
  _$jscoverage['logging/index.js'][334] = 0;
  _$jscoverage['logging/index.js'][335] = 0;
  _$jscoverage['logging/index.js'][336] = 0;
  _$jscoverage['logging/index.js'][337] = 0;
  _$jscoverage['logging/index.js'][338] = 0;
  _$jscoverage['logging/index.js'][339] = 0;
  _$jscoverage['logging/index.js'][349] = 0;
  _$jscoverage['logging/index.js'][357] = 0;
  _$jscoverage['logging/index.js'][358] = 0;
  _$jscoverage['logging/index.js'][359] = 0;
  _$jscoverage['logging/index.js'][369] = 0;
  _$jscoverage['logging/index.js'][376] = 0;
  _$jscoverage['logging/index.js'][377] = 0;
  _$jscoverage['logging/index.js'][387] = 0;
  _$jscoverage['logging/index.js'][399] = 0;
  _$jscoverage['logging/index.js'][400] = 0;
  _$jscoverage['logging/index.js'][401] = 0;
  _$jscoverage['logging/index.js'][403] = 0;
  _$jscoverage['logging/index.js'][412] = 0;
  _$jscoverage['logging/index.js'][413] = 0;
  _$jscoverage['logging/index.js'][414] = 0;
  _$jscoverage['logging/index.js'][415] = 0;
  _$jscoverage['logging/index.js'][416] = 0;
  _$jscoverage['logging/index.js'][417] = 0;
  _$jscoverage['logging/index.js'][419] = 0;
  _$jscoverage['logging/index.js'][421] = 0;
  _$jscoverage['logging/index.js'][426] = 0;
  _$jscoverage['logging/index.js'][436] = 0;
  _$jscoverage['logging/index.js'][441] = 0;
  _$jscoverage['logging/index.js'][446] = 0;
  _$jscoverage['logging/index.js'][450] = 0;
  _$jscoverage['logging/index.js'][455] = 0;
  _$jscoverage['logging/index.js'][460] = 0;
  _$jscoverage['logging/index.js'][465] = 0;
  _$jscoverage['logging/index.js'][470] = 0;
  _$jscoverage['logging/index.js'][475] = 0;
  _$jscoverage['logging/index.js'][480] = 0;
  _$jscoverage['logging/index.js'][485] = 0;
  _$jscoverage['logging/index.js'][490] = 0;
  _$jscoverage['logging/index.js'][495] = 0;
  _$jscoverage['logging/index.js'][500] = 0;
  _$jscoverage['logging/index.js'][501] = 0;
  _$jscoverage['logging/index.js'][502] = 0;
  _$jscoverage['logging/index.js'][504] = 0;
  _$jscoverage['logging/index.js'][508] = 0;
  _$jscoverage['logging/index.js'][520] = 0;
  _$jscoverage['logging/index.js'][529] = 0;
  _$jscoverage['logging/index.js'][534] = 0;
  _$jscoverage['logging/index.js'][535] = 0;
}
_$jscoverage['logging/index.js'][1]++;
var define = require("../define.js"), base = require("../base"), Level = require("./level"), appenders = require("./appenders"), configurators = require("./config");
_$jscoverage['logging/index.js'][6]++;
var rootTree;
_$jscoverage['logging/index.js'][7]++;
var LoggerTree = define.define(null, {instance: {constructor: (function (root) {
  _$jscoverage['logging/index.js'][11]++;
  this.__root = root;
  _$jscoverage['logging/index.js'][12]++;
  this.__name = root.name;
  _$jscoverage['logging/index.js'][13]++;
  this.__level = root.level;
  _$jscoverage['logging/index.js'][14]++;
  this.__parent = root._parent;
  _$jscoverage['logging/index.js'][15]++;
  this.__map = {};
}), __getSubLoggers: (function () {
  _$jscoverage['logging/index.js'][19]++;
  var map = this.__map, ret = [], n;
  _$jscoverage['logging/index.js'][20]++;
  for (var i in map) {
    _$jscoverage['logging/index.js'][21]++;
    n = map[i];
    _$jscoverage['logging/index.js'][22]++;
    if (n) {
      _$jscoverage['logging/index.js'][23]++;
      ret = ret.concat(n.tree.getCurrentLoggers());
    }
}
  _$jscoverage['logging/index.js'][26]++;
  return ret;
}), __getLoggers: (function () {
  _$jscoverage['logging/index.js'][30]++;
  return [this.__root].concat(this.__getSubLoggers());
}), getCurrentLoggers: (function () {
  _$jscoverage['logging/index.js'][34]++;
  return this.__getLoggers();
}), getSubLoggers: (function () {
  _$jscoverage['logging/index.js'][38]++;
  return this.__getSubLoggers();
}), getLogger: (function (name) {
  _$jscoverage['logging/index.js'][42]++;
  var ret;
  _$jscoverage['logging/index.js'][43]++;
  if (name) {
    _$jscoverage['logging/index.js'][44]++;
    var parts = name.split(".");
    _$jscoverage['logging/index.js'][45]++;
    if (parts.length) {
      _$jscoverage['logging/index.js'][46]++;
      var category = parts.shift();
      _$jscoverage['logging/index.js'][47]++;
      var lNode = this.__map[category];
      _$jscoverage['logging/index.js'][48]++;
      if (! lNode) {
        _$jscoverage['logging/index.js'][49]++;
        lNode = this.__map[category] = new Logger(category, this);
        _$jscoverage['logging/index.js'][50]++;
        lNode.addAppenders(this.__root.appenders);
      }
      _$jscoverage['logging/index.js'][52]++;
      ret = lNode;
      _$jscoverage['logging/index.js'][53]++;
      if (parts.length) {
        _$jscoverage['logging/index.js'][55]++;
        name = parts.join(".");
        _$jscoverage['logging/index.js'][56]++;
        ret = lNode.tree.getLogger(name);
      }
    }
  }
  else {
    _$jscoverage['logging/index.js'][60]++;
    ret = this.__root;
  }
  _$jscoverage['logging/index.js'][62]++;
  return ret;
}), getRootLogger: (function () {
  _$jscoverage['logging/index.js'][66]++;
  return this.__root;
}), isDisabled: (function (level) {
}), resetConfiguration: (function () {
}), addAppender: (function (appender) {
  _$jscoverage['logging/index.js'][80]++;
  var map = this.__map;
  _$jscoverage['logging/index.js'][81]++;
  for (var i in map) {
    _$jscoverage['logging/index.js'][82]++;
    map[i].addAppender(appender);
}
}), removeAppender: (function (name) {
  _$jscoverage['logging/index.js'][87]++;
  var map = this.__map;
  _$jscoverage['logging/index.js'][88]++;
  for (var i in map) {
    _$jscoverage['logging/index.js'][89]++;
    map[i].removeAppender(name);
}
}), setters: {level: (function (level) {
  _$jscoverage['logging/index.js'][95]++;
  this.__level = level;
  _$jscoverage['logging/index.js'][96]++;
  if (level && level instanceof Level) {
    _$jscoverage['logging/index.js'][97]++;
    var map = this.__map;
    _$jscoverage['logging/index.js'][98]++;
    for (var i in map) {
      _$jscoverage['logging/index.js'][99]++;
      map[i].level = level;
}
  }
})}, getters: {categories: (function () {
  _$jscoverage['logging/index.js'][109]++;
  return this.getCurrentLoggers().map((function (l) {
  _$jscoverage['logging/index.js'][110]++;
  return l.fullName;
}));
}), name: (function () {
  _$jscoverage['logging/index.js'][115]++;
  var ret = this.__name;
  _$jscoverage['logging/index.js'][116]++;
  if (this.__parent) {
    _$jscoverage['logging/index.js'][117]++;
    var pName = this.__parent.name;
    _$jscoverage['logging/index.js'][118]++;
    if (pName) {
      _$jscoverage['logging/index.js'][119]++;
      ret = pName + "." + ret;
    }
  }
  _$jscoverage['logging/index.js'][122]++;
  return ret;
}), level: (function () {
  _$jscoverage['logging/index.js'][126]++;
  return this.__level;
}), additive: (function () {
  _$jscoverage['logging/index.js'][130]++;
  return this.__root.additive;
})}}});
_$jscoverage['logging/index.js'][136]++;
var comb = exports;
_$jscoverage['logging/index.js'][138]++;
comb.logging = base.merge({Level: Level}, configurators);
_$jscoverage['logging/index.js'][142]++;
comb.logging.appenders = appenders;
_$jscoverage['logging/index.js'][144]++;
var logging = comb.logging;
_$jscoverage['logging/index.js'][227]++;
var Logger = (logging.Logger = define.define(null, {instance: {constructor: (function (name, parent) {
  _$jscoverage['logging/index.js'][233]++;
  this.__additive = true;
  _$jscoverage['logging/index.js'][234]++;
  this.__name = name;
  _$jscoverage['logging/index.js'][235]++;
  this._parent = parent;
  _$jscoverage['logging/index.js'][236]++;
  this._tree = new LoggerTree(this);
  _$jscoverage['logging/index.js'][237]++;
  this.fullName = this._tree.name;
  _$jscoverage['logging/index.js'][238]++;
  if (! parent || ! parent.additive) {
    _$jscoverage['logging/index.js'][239]++;
    this.level = Level.ALL;
  }
  else {
    _$jscoverage['logging/index.js'][241]++;
    this.level = parent.level;
  }
  _$jscoverage['logging/index.js'][243]++;
  this.__appenders = {};
}), info: (function (message) {
  _$jscoverage['logging/index.js'][252]++;
  this.log(Level.INFO, message);
}), debug: (function (message) {
  _$jscoverage['logging/index.js'][261]++;
  this.log(Level.DEBUG, message);
}), error: (function (message) {
  _$jscoverage['logging/index.js'][270]++;
  this.log(Level.ERROR, message);
}), warn: (function (message) {
  _$jscoverage['logging/index.js'][279]++;
  this.log(Level.WARN, message);
}), trace: (function (message) {
  _$jscoverage['logging/index.js'][288]++;
  this.log(Level.TRACE, message);
}), fatal: (function (message) {
  _$jscoverage['logging/index.js'][297]++;
  this.log(Level.FATAL, message);
}), log: (function (level, message) {
  _$jscoverage['logging/index.js'][307]++;
  if (level.isGreaterOrEqualToo(this.level)) {
    _$jscoverage['logging/index.js'][308]++;
    if (Level.TRACE.equals(level)) {
      _$jscoverage['logging/index.js'][309]++;
      var err = new Error();
      _$jscoverage['logging/index.js'][310]++;
      err.name = "Trace";
      _$jscoverage['logging/index.js'][311]++;
      err.message = message || "";
      _$jscoverage['logging/index.js'][312]++;
      Error.captureStackTrace(err, arguments.callee);
      _$jscoverage['logging/index.js'][313]++;
      message = err.stack;
    }
    _$jscoverage['logging/index.js'][315]++;
    var type = level.name.toLowerCase(), appenders = this.__appenders;
    _$jscoverage['logging/index.js'][316]++;
    var event = {level: level, levelName: level.name, message: message, timeStamp: new Date(), name: this.fullName};
    _$jscoverage['logging/index.js'][323]++;
    for (var i in appenders) {
      _$jscoverage['logging/index.js'][324]++;
      appenders[i].append(event);
}
  }
}), addAppender: (function (appender) {
  _$jscoverage['logging/index.js'][334]++;
  if (appender) {
    _$jscoverage['logging/index.js'][335]++;
    var name = appender.name;
    _$jscoverage['logging/index.js'][336]++;
    if (! (name in this.__appenders)) {
      _$jscoverage['logging/index.js'][337]++;
      this.__appenders[name] = appender;
      _$jscoverage['logging/index.js'][338]++;
      appender.level = this.level;
      _$jscoverage['logging/index.js'][339]++;
      this._tree.addAppender(appender);
    }
  }
}), addAppenders: (function (appenders) {
  _$jscoverage['logging/index.js'][349]++;
  appenders.forEach(base.hitch(this, "addAppender"));
}), removeAppender: (function (name) {
  _$jscoverage['logging/index.js'][357]++;
  if (name in this.__appenders) {
    _$jscoverage['logging/index.js'][358]++;
    delete this.__appenders[name];
    _$jscoverage['logging/index.js'][359]++;
    this._tree.removeAppender(name);
  }
}), removeAppenders: (function (appenders) {
  _$jscoverage['logging/index.js'][369]++;
  appenders.forEach(this.removeAppender, this);
}), removeAllAppenders: (function () {
  _$jscoverage['logging/index.js'][376]++;
  for (var i in this.__appenders) {
    _$jscoverage['logging/index.js'][377]++;
    this.removeAppender(i);
}
}), isAppenderAttached: (function (name) {
  _$jscoverage['logging/index.js'][387]++;
  return (name in this.__appenders);
}), getAppender: (function (name) {
  _$jscoverage['logging/index.js'][399]++;
  var ret;
  _$jscoverage['logging/index.js'][400]++;
  if (name in this.__appenders) {
    _$jscoverage['logging/index.js'][401]++;
    ret = this.__appenders[name];
  }
  _$jscoverage['logging/index.js'][403]++;
  return ret;
}), setters: {level: (function (level) {
  _$jscoverage['logging/index.js'][412]++;
  level = Level.toLevel(level);
  _$jscoverage['logging/index.js'][413]++;
  if (this.__additive) {
    _$jscoverage['logging/index.js'][414]++;
    this.__level = level;
    _$jscoverage['logging/index.js'][415]++;
    var appenders = this.__appenders;
    _$jscoverage['logging/index.js'][416]++;
    for (var i in appenders) {
      _$jscoverage['logging/index.js'][417]++;
      appenders[i].level = level;
}
    _$jscoverage['logging/index.js'][419]++;
    this._tree.level = level;
  }
  else {
    _$jscoverage['logging/index.js'][421]++;
    this.__level = level;
  }
}), additive: (function (additive) {
  _$jscoverage['logging/index.js'][426]++;
  this.__additive = additive;
})}, getters: {subLoggers: (function () {
  _$jscoverage['logging/index.js'][436]++;
  return this._tree.getSubLoggers();
}), level: (function () {
  _$jscoverage['logging/index.js'][441]++;
  return this.__level;
}), additive: (function () {
  _$jscoverage['logging/index.js'][446]++;
  return this.__additive;
}), isAll: (function () {
  _$jscoverage['logging/index.js'][450]++;
  return Level.ALL.isGreaterOrEqualToo(this.level);
}), isDebug: (function () {
  _$jscoverage['logging/index.js'][455]++;
  return Level.DEBUG.isGreaterOrEqualToo(this.level);
}), isTrace: (function () {
  _$jscoverage['logging/index.js'][460]++;
  return Level.TRACE.isGreaterOrEqualToo(this.level);
}), isInfo: (function () {
  _$jscoverage['logging/index.js'][465]++;
  return Level.INFO.isGreaterOrEqualToo(this.level);
}), isWarn: (function () {
  _$jscoverage['logging/index.js'][470]++;
  return Level.WARN.isGreaterOrEqualToo(this.level);
}), isError: (function () {
  _$jscoverage['logging/index.js'][475]++;
  return Level.ERROR.isGreaterOrEqualToo(this.level);
}), isFatal: (function () {
  _$jscoverage['logging/index.js'][480]++;
  return Level.FATAL.isGreaterOrEqualToo(this.level);
}), isOff: (function () {
  _$jscoverage['logging/index.js'][485]++;
  return Level.OFF.equals(this.level);
}), name: (function () {
  _$jscoverage['logging/index.js'][490]++;
  return this.__name;
}), tree: (function () {
  _$jscoverage['logging/index.js'][495]++;
  return this._tree;
}), appenders: (function () {
  _$jscoverage['logging/index.js'][500]++;
  var ret = [];
  _$jscoverage['logging/index.js'][501]++;
  for (var i in this.__appenders) {
    _$jscoverage['logging/index.js'][502]++;
    ret.push(this.__appenders[i]);
}
  _$jscoverage['logging/index.js'][504]++;
  return ret;
}), categories: (function () {
  _$jscoverage['logging/index.js'][508]++;
  return this._tree.categories;
})}}, static: {getRootLogger: (function () {
  _$jscoverage['logging/index.js'][520]++;
  return rootTree.getRootLogger();
}), getLogger: (function (name) {
  _$jscoverage['logging/index.js'][529]++;
  return rootTree.getLogger(name);
})}}));
_$jscoverage['logging/index.js'][534]++;
var rootLogger = new Logger("");
_$jscoverage['logging/index.js'][535]++;
rootTree = rootLogger._tree;
_$jscoverage['logging/index.js'].source = ["var define = require(\"../define.js\"),","\t\tbase = require(\"../base\"),","\t\tLevel = require(\"./level\"),","\t\tappenders = require(\"./appenders\"),","\t\tconfigurators = require(\"./config\");","var rootTree;","var LoggerTree = define.define(null, {","\t\t\tinstance : {","","\t\t\t\tconstructor : function(root) {","\t\t\t\t\tthis.__root = root;","\t\t\t\t\tthis.__name = root.name;","\t\t\t\t\tthis.__level = root.level;","\t\t\t\t\tthis.__parent = root._parent;","\t\t\t\t\tthis.__map = {};","\t\t\t\t},","","                __getSubLoggers : function(){","                     var map = this.__map, ret = [], n;","\t\t\t\t\tfor (var i in map) {","\t\t\t\t\t\tn = map[i];","\t\t\t\t\t\tif (n) {","\t\t\t\t\t\t\tret = ret.concat(n.tree.getCurrentLoggers());","\t\t\t\t\t\t}","\t\t\t\t\t}","\t\t\t\t\treturn ret;","                },","","\t\t\t\t__getLoggers : function() {","\t\t\t\t\treturn [this.__root].concat(this.__getSubLoggers())","\t\t\t\t},","","\t\t\t\tgetCurrentLoggers : function() {","\t\t\t\t\treturn this.__getLoggers();","\t\t\t\t},","","                getSubLoggers : function() {","\t\t\t\t\treturn this.__getSubLoggers();","\t\t\t\t},","","\t\t\t\tgetLogger : function(name) {","\t\t\t\t\tvar ret;","\t\t\t\t\tif (name) {","\t\t\t\t\t\tvar parts = name.split(\".\");","\t\t\t\t\t\tif (parts.length) {","\t\t\t\t\t\t\tvar category = parts.shift();","\t\t\t\t\t\t\tvar lNode = this.__map[category];","\t\t\t\t\t\t\tif (!lNode) {","\t\t\t\t\t\t\t\tlNode = this.__map[category] = new Logger(category, this);","\t\t\t\t\t\t\t\tlNode.addAppenders(this.__root.appenders);","\t\t\t\t\t\t\t}","\t\t\t\t\t\t\tret = lNode;","\t\t\t\t\t\t\tif (parts.length) {","\t\t\t\t\t\t\t\t//keep searching","\t\t\t\t\t\t\t\tname = parts.join(\".\");","\t\t\t\t\t\t\t\tret = lNode.tree.getLogger(name);","\t\t\t\t\t\t\t}","\t\t\t\t\t\t}","\t\t\t\t\t} else {","\t\t\t\t\t\tret = this.__root;","\t\t\t\t\t}","\t\t\t\t\treturn ret;","\t\t\t\t},","","\t\t\t\tgetRootLogger : function() {","\t\t\t\t\treturn this.__root;","\t\t\t\t},","","\t\t\t\tisDisabled : function(level) {","\t\t\t\t},","","\t\t\t\tresetConfiguration : function() {","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * level = string|Level","\t\t\t\t */","","\t\t\t\taddAppender : function(appender) {","\t\t\t\t\tvar map = this.__map;","\t\t\t\t\tfor (var i in map) {","\t\t\t\t\t\tmap[i].addAppender(appender);","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\tremoveAppender : function(name) {","\t\t\t\t\tvar map = this.__map;","\t\t\t\t\tfor (var i in map) {","\t\t\t\t\t\tmap[i].removeAppender(name);","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\tsetters : {","\t\t\t\t\tlevel : function(level) {","\t\t\t\t\t\tthis.__level = level;","\t\t\t\t\t\tif (level &amp;&amp; level instanceof Level) {","\t\t\t\t\t\t\tvar map = this.__map;","\t\t\t\t\t\t\tfor (var i in map) {","\t\t\t\t\t\t\t\tmap[i].level = level;","\t\t\t\t\t\t\t}","","\t\t\t\t\t\t}","\t\t\t\t\t}","","\t\t\t\t},","","\t\t\t\tgetters : {","\t\t\t\t\tcategories : function() {","\t\t\t\t\t\treturn this.getCurrentLoggers().map(function(l) {","\t\t\t\t\t\t\treturn l.fullName;","\t\t\t\t\t\t});","\t\t\t\t\t},","","\t\t\t\t\tname : function() {","\t\t\t\t\t\tvar ret = this.__name;","\t\t\t\t\t\tif (this.__parent) {","\t\t\t\t\t\t\tvar pName = this.__parent.name;","\t\t\t\t\t\t\tif (pName) {","\t\t\t\t\t\t\t\tret = pName + \".\" + ret;","\t\t\t\t\t\t\t}","\t\t\t\t\t\t}","\t\t\t\t\t\treturn ret;","\t\t\t\t\t},","","\t\t\t\t\tlevel : function() {","\t\t\t\t\t\treturn this.__level;","\t\t\t\t\t},","","                    additive : function(){","                        return this.__root.additive;","                    }","\t\t\t\t}","\t\t\t}","\t\t});","","var comb = exports;","/**@namespace logging package*/","comb.logging = base.merge({","\t\t\tLevel : Level","\t\t}, configurators);","/**@namespace appenders for logging*/","comb.logging.appenders = appenders;","","var logging = comb.logging;","","/**"," * @class This class is the entry point for all logging actions in comb."," * &lt;p&gt;&lt;b&gt;Logger should be retrieved by calling Logger.getLogger() NOT through the new keyword&lt;/b&gt;&lt;p&gt;"," * &lt;p&gt;"," *     All loggers in comb follow a heirarchy of inheritance based on a dot notation."," *     &lt;pre class=\"code\"&gt;"," *                          rootLogger - \"\""," *                                  /         \\"," *                               \"my\"      \"myOther\""," *                               /               \\"," *                         \"my.logger\"       \"myOther.logger\""," *                            /                     \\"," *                       \"my.logger.Log\"        \"myOther.logger.Log\""," *"," *     &lt;/pre&gt;"," *     In the above Tree the rootLogger is the base for all logger. my and myOther inherit from rootLogger"," *     my.logger inherits from my, and myOther.logger inherits from myOther. The logs do not have to be retrieved in"," *     order. If I set rootLogger to ERROR level and added a console appender to it the appender and level will be"," *     added to all logs. However if I set my to INFO level and add a fileAppender to it the level and appender will"," *     only be added to logs in \"my\" subtree. If you set my.logger to not be additive then levels, and appenders will not"," *     propogate down to the rest of the tree."," *"," * &lt;/p&gt;"," *"," * &lt;p&gt;For information on levels see {@link comb.logging.Level}.&lt;/p&gt;"," * &lt;p&gt;For information on appenders see"," *          &lt;ul&gt;"," *              &lt;li&gt;{@link comb.logging.appenders.Appender}&lt;/li&gt;"," *              &lt;li&gt;{@link comb.logging.appenders.ConsoleAppender}&lt;/li&gt;"," *              &lt;li&gt;{@link comb.logging.appenders.FileAppender}&lt;/li&gt;"," *              &lt;li&gt;{@link comb.logging.appenders.JSONAppender}&lt;/li&gt;"," *              &lt;li&gt;{@link comb.logging.appenders.RollingFileAppender}&lt;/li&gt;"," *          &lt;/ul&gt;"," * &lt;/p&gt;"," * &lt;p&gt;For information on configurators see {@link comb.logging.BasicConfigurator} or {@link comb.logging.PropertyConfigurator}.&lt;/p&gt;"," *"," * @example"," *"," * var logging = comb.logging,"," *     Logger = logging.Logger,"," *     appenders = logging.appenders,"," *     Level = logging.Level;"," *"," * //configure you logging environement"," *"," * var bc = logging.BasicConfigurator();"," * //add console appender to all loggers"," * bc.configure();"," * //add a file appender to all loggers"," * bc.configure(new appenders.FileAppender({file : \"/var/log/myLog.log\"}));"," *"," * //Retreiving a logger."," * var combLogger = Logger.getLogger(\"comb\");"," * var combCollectionLogger = Logger.getLogger(\"comb.collections\");"," * var treeLogger = Logger.getLogger(\"comb.collections.Tree\");"," *"," * //set my treeLogger to DEBUG Level"," * treeLogger.level = Level.DEBUG;"," * //add a JSON appender to tree logger just for fun!"," * treeLogger.addAppender(new appenders.JSONAppender({file : \"/var/log/myTreeLogger.json\"}));"," *"," * //NOW USE THEM"," *"," *"," * @name Logger"," * @memberOf comb.logging"," *"," * @property {Array&lt;comb.logging.Logger&gt;} subLoggers all loggers this logger is the parent of."," * @property {comb.logging.Level} level the level of this Logger"," * @property {Boolean} additive set to false to prevent changes to this logger from propogating down."," * @property {Boolean} isDebug true if this Loggers level is DEBUG"," * @property {Boolean} isTrace true if this Loggers level is TRACE"," * @property {Boolean} isInfo true if this Loggers level is INFO"," * @property {Boolean} isWarn true if this Loggers level is WARN"," * @property {Boolean} isError true if this Loggers level is ERROR"," * @property {Boolean} isFatal true if this Loggers level is FATAL"," * @property {Boolean} isOff true if this Loggers level is OFF"," * @property {String} name the name of this logger this &lt;b&gt;does not&lt;/b&gt; include the dot notated name"," * @property {String} fullName the full path name of this Logger."," * @property {comb.logging.appenders.Appender} appenders list of appenders this logger currently contains."," */","var Logger = (logging.Logger = define.define(null, {","","\t\t\tinstance: {","\t\t\t\t/**@lends comb.logging.Logger.prototype*/","","\t\t\t\tconstructor : function(name, parent) {","\t\t\t\t\tthis.__additive = true;","\t\t\t\t\tthis.__name = name;","\t\t\t\t\tthis._parent = parent;","\t\t\t\t\tthis._tree = new LoggerTree(this);","\t\t\t\t\tthis.fullName = this._tree.name;","\t\t\t\t\tif (!parent || !parent.additive) {","\t\t\t\t\t\tthis.level = Level.ALL;","\t\t\t\t\t} else {","\t\t\t\t\t\tthis.level = parent.level;","\t\t\t\t\t}","\t\t\t\t\tthis.__appenders = {};","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log an info level message","\t\t\t\t *","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\tinfo : function(message) {","\t\t\t\t\tthis.log(Level.INFO, message);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log an debug level message","\t\t\t\t *","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\tdebug : function(message) {","\t\t\t\t\tthis.log(Level.DEBUG, message);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log an error level message","\t\t\t\t *","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\terror : function(message) {","\t\t\t\t\tthis.log(Level.ERROR, message);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log an warn level message","\t\t\t\t *","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\twarn : function(message) {","\t\t\t\t\tthis.log(Level.WARN, message);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log an trace level message","\t\t\t\t *","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\ttrace : function(message) {","\t\t\t\t\tthis.log(Level.TRACE, message);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log an fatal level message","\t\t\t\t *","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\tfatal : function(message) {","\t\t\t\t\tthis.log(Level.FATAL, message);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Log a message","\t\t\t\t *","\t\t\t\t * @param {comb.logging.Level} level the level the message is","\t\t\t\t * @param {String} message the message to log.","\t\t\t\t */","\t\t\t\tlog : function(level, message) {","\t\t\t\t\tif (level.isGreaterOrEqualToo(this.level)) {","\t\t\t\t\t\tif (Level.TRACE.equals(level)) {","\t\t\t\t\t\t\tvar err = new Error;","\t\t\t\t\t\t\terr.name = \"Trace\";","\t\t\t\t\t\t\terr.message = message || '';","\t\t\t\t\t\t\tError.captureStackTrace(err, arguments.callee);","\t\t\t\t\t\t\tmessage = err.stack;","\t\t\t\t\t\t}","\t\t\t\t\t\tvar type = level.name.toLowerCase(), appenders = this.__appenders;","\t\t\t\t\t\tvar event = {","\t\t\t\t\t\t\tlevel : level,","\t\t\t\t\t\t\tlevelName : level.name,","\t\t\t\t\t\t\tmessage : message,","\t\t\t\t\t\t\ttimeStamp : new Date(),","\t\t\t\t\t\t\tname : this.fullName","\t\t\t\t\t\t};","\t\t\t\t\t\tfor (var i in appenders) {","\t\t\t\t\t\t\tappenders[i].append(event);","\t\t\t\t\t\t}","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Add an appender to this logger. If this is additive then the appender is added to all subloggers.","\t\t\t\t * @param {comb.logging.Appender} appender the appender to add.","\t\t\t\t */","\t\t\t\taddAppender : function(appender) {","\t\t\t\t\tif (appender) {","\t\t\t\t\t\tvar name = appender.name;","\t\t\t\t\t\tif (!(name in this.__appenders)) {","\t\t\t\t\t\t\tthis.__appenders[name] = appender;","\t\t\t\t\t\t\tappender.level = this.level;","\t\t\t\t\t\t\tthis._tree.addAppender(appender);","\t\t\t\t\t\t}","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Short cut to add a list of appenders to this Logger","\t\t\t\t * @param {Array&lt;comb.logging.Appender&gt;} appenders","\t\t\t\t */","\t\t\t\taddAppenders : function(appenders) {","\t\t\t\t\tappenders.forEach(base.hitch(this, \"addAppender\"));","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Removes and appender from this logger.","\t\t\t\t * @param {String} name the name of the appender","\t\t\t\t */","\t\t\t\tremoveAppender : function(name) {","\t\t\t\t\tif (name in this.__appenders) {","\t\t\t\t\t\tdelete this.__appenders[name];","\t\t\t\t\t\tthis._tree.removeAppender(name);","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Removes a list of appenders from this logger.","\t\t\t\t *","\t\t\t\t * @param {Array&lt;String&gt;} appenders a list of names of appenders to remove","\t\t\t\t */","\t\t\t\tremoveAppenders : function(appenders) {","\t\t\t\t\tappenders.forEach(this.removeAppender, this);","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Removes all appenders from this logger and sub loggers if this Logger is additive.","\t\t\t\t */","\t\t\t\tremoveAllAppenders : function() {","\t\t\t\t\tfor (var i in this.__appenders) {","\t\t\t\t\t\tthis.removeAppender(i);","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Determines if an appender is attached.","\t\t\t\t *","\t\t\t\t * @param {String} name the name of the appender.","\t\t\t\t */","\t\t\t\tisAppenderAttached : function(name) {","\t\t\t\t\treturn (name in this.__appenders);","\t\t\t\t},","","                /**","\t\t\t\t * Gets an appender from this logger","\t\t\t\t *","\t\t\t\t * @param {String} name the name of the appender.","                 *","                 * @return {comb.logging.Appender|undefined} returns the appender with the specified name or","                 *                                          undefined if it is not found.","\t\t\t\t */","\t\t\t\tgetAppender : function(name) {","                    var ret;","\t\t\t\t\tif(name in this.__appenders){","                        ret = this.__appenders[name];","                    }","                    return ret;","\t\t\t\t},","","\t\t\t\t/**","                 * @ignore","                 * */","\t\t\t\tsetters : {","","\t\t\t\t\tlevel : function(level) {","                        level = Level.toLevel(level);","\t\t\t\t\t\tif (this.__additive) {","\t\t\t\t\t\t\tthis.__level = level;","\t\t\t\t\t\t\tvar appenders = this.__appenders;","\t\t\t\t\t\t\tfor (var i in appenders) {","\t\t\t\t\t\t\t\tappenders[i].level = level;","\t\t\t\t\t\t\t}","\t\t\t\t\t\t\tthis._tree.level = level;","\t\t\t\t\t\t} else {","\t\t\t\t\t\t\tthis.__level = level;","\t\t\t\t\t\t}","\t\t\t\t\t},","","\t\t\t\t\tadditive : function(additive) {","\t\t\t\t\t\tthis.__additive = additive;","\t\t\t\t\t}","\t\t\t\t},","","\t\t\t\t/**@ignore*/","\t\t\t\tgetters : {","\t\t\t\t\t/**@ignore*/","","\t\t\t\t\t\t\t/**@ignore*/","\t\t\t\t\tsubLoggers : function() {","\t\t\t\t\t\treturn this._tree.getSubLoggers();","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tlevel : function() {","\t\t\t\t\t\treturn this.__level;","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tadditive : function() {","\t\t\t\t\t\treturn this.__additive;","\t\t\t\t\t},","","                    isAll : function(){","                         \treturn Level.ALL.isGreaterOrEqualToo(this.level);","                    },","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisDebug : function() {","\t\t\t\t\t\treturn Level.DEBUG.isGreaterOrEqualToo(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisTrace : function() {","\t\t\t\t\t\treturn Level.TRACE.isGreaterOrEqualToo(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisInfo : function() {","\t\t\t\t\t\treturn Level.INFO.isGreaterOrEqualToo(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisWarn : function() {","\t\t\t\t\t\treturn Level.WARN.isGreaterOrEqualToo(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisError : function() {","\t\t\t\t\t\treturn Level.ERROR.isGreaterOrEqualToo(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisFatal : function() {","\t\t\t\t\t\treturn Level.FATAL.isGreaterOrEqualToo(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tisOff : function() {","\t\t\t\t\t\treturn Level.OFF.equals(this.level);","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tname : function() {","\t\t\t\t\t\treturn this.__name;","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\ttree : function() {","\t\t\t\t\t\treturn this._tree;","\t\t\t\t\t},","","\t\t\t\t\t/**@ignore*/","\t\t\t\t\tappenders : function() {","\t\t\t\t\t\tvar ret = [];","\t\t\t\t\t\tfor (var i in this.__appenders) {","\t\t\t\t\t\t\tret.push(this.__appenders[i]);","\t\t\t\t\t\t}","\t\t\t\t\t\treturn ret;","\t\t\t\t\t},","","                    categories: function(){","                        return this._tree.categories;","                    }","\t\t\t\t}","\t\t\t},","","\t\t\tstatic : {","\t\t\t\t/**@lends comb.logging.Logger*/","","\t\t\t\t/**","\t\t\t\t * Return the root of all loggers","\t\t\t\t */","\t\t\t\tgetRootLogger : function() {","\t\t\t\t\treturn rootTree.getRootLogger();","\t\t\t\t},","","\t\t\t\t/**","\t\t\t\t * Retrieves/Creates a logger based on the name passed in","\t\t\t\t *","\t\t\t\t * @param {String} name the name of the logger","\t\t\t\t */","\t\t\t\tgetLogger : function(name) {","\t\t\t\t\treturn rootTree.getLogger(name);","\t\t\t\t}","\t\t\t}","\t\t}));","","var rootLogger = new Logger(\"\");","rootTree = rootLogger._tree;","",""];
