logger.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. var LoggerSystem = require('./system');
  2. var LogWriter = require('./writer');
  3. var LogAdapter = require('./adapter');
  4. var util = require('util');
  5. var Logger = class Logger {
  6. constructor(name) {
  7. this.name = name;
  8. this.lastTime = process.hrtime();
  9. this.count = 0;
  10. }
  11. base(LVL,args) {
  12. var msg = args.map(a => (typeof(a) == "object")? util.inspect(a):a).join(" ");
  13. this.sys.base(this,LVL,msg);
  14. this.lastTime = process.hrtime();
  15. this.count++;
  16. }
  17. info(...args) {
  18. this.base(Logger.INFO,args);
  19. }
  20. error(...args) {
  21. this.base(Logger.ERROR,args);
  22. }
  23. warn(...args) {
  24. this.base(Logger.WARN,args);
  25. }
  26. verb(...args) {
  27. this.base(Logger.VERBOSE,args);
  28. }
  29. }
  30. Logger.root = new LoggerSystem();
  31. // statics
  32. Logger.createLogger = function (name) {
  33. var logger = new Logger(name);
  34. logger.sys = Logger.root;
  35. return logger;
  36. }
  37. // By order of importance
  38. //Logger.logTags = ["ERROR","WARN","INFO","VERBOSE"];
  39. for( var i in LoggerSystem.TAGS) {
  40. Logger[LoggerSystem.TAGS[i]] = i;
  41. }
  42. // Filter functions
  43. //
  44. //
  45. Logger.le = function(TAG) {
  46. return function(itag) {
  47. return itag <= TAG;
  48. }
  49. }
  50. Logger.ge = function(TAG) {
  51. return function(itag) {
  52. return itag <= TAG;
  53. }
  54. }
  55. Logger.eq = function(TAG) {
  56. return function(itag) {
  57. return itag == TAG;
  58. }
  59. };
  60. Logger.in = function(args) {
  61. return function(itag) {
  62. var TAGS = args;
  63. return TAGS.indexOf(itag) >= 0;
  64. }
  65. }
  66. Logger.reset = function reset() {
  67. Logger.root.adapters = [];
  68. }
  69. Logger.setup = function (conf) {
  70. var writerInst = [];
  71. Logger.root.loggerLevels = conf.loggers;
  72. conf.adapters.forEach(function(ad) {
  73. var adapterWriter = [];
  74. ad.writers.forEach(function(e) { // Writer selection
  75. // Use same or create new, should be stored in Logger somehow
  76. if(conf.writers[e] == undefined) {
  77. throw new Error ("Adapter requested an inexistent writer: '" + e + "'");
  78. }
  79. if(Logger.root.writers[conf.writers[e].writer] == undefined) {
  80. throw new Error ("Requested writer: '" + conf.writers[e].writer + "' does not exists in context");
  81. }
  82. if(writerInst[e] == undefined) {
  83. writerInst[e] = new Logger.root.writers[conf.writers[e].writer](conf.writers[e].opts);
  84. }
  85. if(writerInst[e] != undefined) {
  86. adapterWriter.push( writerInst[e]);
  87. };
  88. })
  89. var levels = [];
  90. ad.levels.forEach(function(e) {
  91. levels.push(Logger[e]);
  92. });
  93. var adapter = new LogAdapter(Logger.in(levels),adapterWriter,ad.fmt);
  94. adapter.loggerLevels = ad.loggers;
  95. Logger.root.adapter(adapter);
  96. })
  97. }
  98. module.exports = Logger;