system.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. var LogAdapter = require('./adapter');
  2. var LogWriter = require('./writer');
  3. var LoggerSystem = class LoggerSystem {
  4. constructor() {
  5. this.adapters = [];
  6. this.writers = {};
  7. // Prepare TAGS
  8. // Global log count? per log
  9. // Stuff to replace
  10. this.logFmt = "[%c]:%t: %m %e";
  11. }
  12. writer(name,writer) {
  13. this.writers[name]= writer;
  14. }
  15. adapter(adapter) {
  16. if(!adapter instanceof LogAdapter) {
  17. throw Error("Should be an adapter");
  18. }
  19. this.adapters.push(adapter);
  20. return adapter;
  21. }
  22. clear() {
  23. this.adapters = [];
  24. }
  25. base(logger,TAG,msg) {
  26. var self = this;
  27. this.adapters.forEach((e) => {
  28. if(e.filterFunc(TAG)) {
  29. var fmt = e.logFmt || this.logFmt;
  30. e.writers.forEach(function(w) {
  31. var outmsg = self.format(TAG,w.count,logger.name,w.lastTime,logger.lastTime,fmt,msg);
  32. // Strip ansi if any
  33. w.doLog(outmsg);
  34. });
  35. }
  36. });
  37. }
  38. format(TAG,count,name,lastDate, lastLoggerDate, fmt, msg) {
  39. var now = new Date();
  40. var dateStr = (("0" + now.getDate()).slice(-2)
  41. + "-" + ("0" +now.getMonth()).slice(-2)
  42. + "-" + now.getFullYear()
  43. + " " + ("0" + now.getHours()).slice(-2)
  44. + ":" + ("0" + now.getMinutes()).slice(-2)
  45. + ":" + ("0"+now.getSeconds()).slice(-2)) ;
  46. var dateDiff = (now - lastDate);
  47. var dateDiffStr = dateDiff + "ms";
  48. if(dateDiff>1000) dateDiffStr = (dateDiff / 1000).toFixed(2) + "s";
  49. var ldateDiffhr = process.hrtime(lastLoggerDate);
  50. var ldateDiff = ( ldateDiffhr[0] * 1000000 + ldateDiffhr[1] / 1000 ) / 1000;
  51. var ldateDiffStr = "";
  52. if(ldateDiff > 1000)
  53. ldateDiffStr = (ldateDiff / 1000).toFixed(2) + "s";
  54. else {
  55. ldateDiffStr = ldateDiff.toFixed(2) +"ms";
  56. }
  57. var s = fmt;
  58. s = s.replace(/%c/g,count);
  59. s = s.replace(/%m/g,msg);
  60. s = s.replace(/%l/g,require('./logger').logTags[TAG]);
  61. s = s.replace(/%n/g,name);
  62. s = s.replace(/%e/g,"+" +dateDiffStr);
  63. s = s.replace(/%E/g,"+" +ldateDiffStr);
  64. s = s.replace(/%t/g,dateStr);
  65. s = s.replace(/%%/g,"%");
  66. s = s.replace(/%a/g,"\x1b");
  67. var logSplit = s.split("%|");
  68. // Might be sloooww
  69. if(logSplit.length == 2) {
  70. var ansiRegex = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
  71. var llen = logSplit[0].replace(ansiRegex,"").length;
  72. var rlen = logSplit[1].replace(ansiRegex,"").length+1;
  73. // Only works if it has columns else just give some default
  74. var col = process.stdout.columns || 80;
  75. var pad = col - llen -rlen;
  76. s = logSplit[0];
  77. for(var i = 0;i<pad;i++) { s+=" "; }
  78. s+= " "+logSplit[1];
  79. }
  80. return s;
  81. }
  82. }
  83. module.exports = LoggerSystem;