Logger.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. var Emitter = require('./Emitter');
  2. var Enum = require('./Enum');
  3. var toArr = require('./toArr');
  4. var isUndef = require('./isUndef');
  5. var clone = require('./clone');
  6. var isStr = require('./isStr');
  7. var isNum = require('./isNum');
  8. exports = Emitter.extend(
  9. {
  10. initialize: function Logger(name, level) {
  11. this.name = name;
  12. this.setLevel(isUndef(level) ? exports.level.DEBUG : level);
  13. this.callSuper(Emitter, 'initialize', arguments);
  14. },
  15. setLevel: function(level) {
  16. if (isStr(level)) {
  17. level = exports.level[level.toUpperCase()];
  18. if (level) this._level = level;
  19. return this;
  20. }
  21. if (isNum(level)) this._level = level;
  22. return this;
  23. },
  24. getLevel: function() {
  25. return this._level;
  26. },
  27. formatter: function(type, argList) {
  28. return argList;
  29. },
  30. trace: function() {
  31. return this._log('trace', arguments);
  32. },
  33. debug: function() {
  34. return this._log('debug', arguments);
  35. },
  36. info: function() {
  37. return this._log('info', arguments);
  38. },
  39. warn: function() {
  40. return this._log('warn', arguments);
  41. },
  42. error: function() {
  43. return this._log('error', arguments);
  44. },
  45. _log: function(type, argList) {
  46. argList = toArr(argList);
  47. if (argList.length === 0) return this;
  48. this.emit('all', type, clone(argList));
  49. if (exports.level[type.toUpperCase()] < this._level) return this;
  50. this.emit(type, clone(argList));
  51. var consoleMethod = type === 'debug' ? console.log : console[type];
  52. consoleMethod.apply(console, this.formatter(type, argList));
  53. return this;
  54. }
  55. },
  56. {
  57. level: new Enum({
  58. TRACE: 0,
  59. DEBUG: 1,
  60. INFO: 2,
  61. WARN: 3,
  62. ERROR: 4,
  63. SILENT: 5
  64. })
  65. }
  66. );
  67. module.exports = exports;