logger.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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).replace(/\n/g,''):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.createLogger = function (name) {
  31. var logger = new Logger(name);
  32. logger.sys = Logger.root;
  33. return logger;
  34. }
  35. // By order of importance
  36. Logger.logTags = ["ERROR","WARN","INFO","VERBOSE"];
  37. for( var i in Logger.logTags) {
  38. Logger[Logger.logTags[i]] = i;
  39. }
  40. // Filter functions
  41. //
  42. //
  43. Logger.le = function(TAG) {
  44. return function(itag) {
  45. return itag <= TAG;
  46. }
  47. }
  48. Logger.ge = function(TAG) {
  49. return function(itag) {
  50. return itag <= TAG;
  51. }
  52. }
  53. Logger.eq = function(TAG) {
  54. return function(itag) {
  55. return itag == TAG;
  56. }
  57. };
  58. Logger.in = function(...args) {
  59. var TAGS = args;
  60. return function(itag) {
  61. return TAGS.indexOf(itag) >= 0;
  62. }
  63. }
  64. Logger.setup = function (conf) {
  65. var writerInst = [];
  66. conf.adapters.forEach(function(ad) {
  67. var levels = [];
  68. var adapterWriter = [];
  69. ad.writers.forEach(function(e) { // Writer selection
  70. // Use same or create new, should be stored in Logger somehow
  71. if(conf.writers[e] == undefined) {
  72. throw new Error ("Adapter requested an inexistent writer: '" + e + "'");
  73. }
  74. if(Logger.root.writers[conf.writers[e].writer] == undefined) {
  75. throw new Error ("Requested writer: '" + conf.writers[e].writer + "' does not exists in context");
  76. }
  77. if(writerInst[e] == undefined) {
  78. writerInst[e] = new Logger.root.writers[conf.writers[e].writer](conf.writers[e].opts);
  79. }
  80. if(writerInst[e] != undefined) {
  81. adapterWriter.push( writerInst[e]);
  82. };
  83. })
  84. ad.levels.forEach(function(e) {
  85. levels = Logger[e];
  86. });
  87. var adapter = new LogAdapter(Logger.in(levels),adapterWriter,ad.fmt);
  88. Logger.root.adapter(adapter);
  89. })
  90. }
  91. module.exports = Logger;