index.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. "use strict";
  2. var __assign = (this && this.__assign) || function () {
  3. __assign = Object.assign || function(t) {
  4. for (var s, i = 1, n = arguments.length; i < n; i++) {
  5. s = arguments[i];
  6. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  7. t[p] = s[p];
  8. }
  9. return t;
  10. };
  11. return __assign.apply(this, arguments);
  12. };
  13. var __read = (this && this.__read) || function (o, n) {
  14. var m = typeof Symbol === "function" && o[Symbol.iterator];
  15. if (!m) return o;
  16. var i = m.call(o), r, ar = [], e;
  17. try {
  18. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  19. }
  20. catch (error) { e = { error: error }; }
  21. finally {
  22. try {
  23. if (r && !r.done && (m = i["return"])) m.call(i);
  24. }
  25. finally { if (e) throw e.error; }
  26. }
  27. return ar;
  28. };
  29. var __spread = (this && this.__spread) || function () {
  30. for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
  31. return ar;
  32. };
  33. Object.defineProperty(exports, "__esModule", { value: true });
  34. var util_1 = require("util");
  35. var context_1 = require("./context");
  36. var level_1 = require("./level");
  37. var target_1 = require("./target");
  38. var lastSeqNumber = 0;
  39. var resetSequence = function (next) {
  40. if (next === void 0) { next = 1; }
  41. lastSeqNumber = next - 1;
  42. };
  43. exports.resetSequence = resetSequence;
  44. var lastSequenceNumber = function () { return lastSeqNumber; };
  45. exports.lastSequenceNumber = lastSequenceNumber;
  46. var createEmptyFunction = function () {
  47. return Object.defineProperty(function emptyFunction() { }, 'isEmptyFunction', { value: true });
  48. };
  49. var createEmptyLogger = function () {
  50. var log = createEmptyFunction();
  51. log.child = function () { return createEmptyLogger(); };
  52. log.wrap = function () {
  53. var args = [];
  54. for (var _i = 0; _i < arguments.length; _i++) {
  55. args[_i] = arguments[_i];
  56. }
  57. return args.pop();
  58. };
  59. level_1.LogLevelNames.forEach(function (name) {
  60. log[name] = log;
  61. });
  62. return log;
  63. };
  64. var createLogger = function (_a) {
  65. var _b = _a === void 0 ? {} : _a, _c = _b.context, baseContext = _c === void 0 ? {} : _c, _d = _b.targets, logTargets = _d === void 0 ? target_1.DEFAULT_LOG_TARGET : _d, logTranslator = _b.translate;
  66. var targets = typeof logTargets === 'string' ? target_1.parseLogTargets(logTargets) : logTargets;
  67. if (targets.length === 0) {
  68. return createEmptyLogger();
  69. }
  70. var log = function () {
  71. var args = [];
  72. for (var _i = 0; _i < arguments.length; _i++) {
  73. args[_i] = arguments[_i];
  74. }
  75. var time = Date.now();
  76. var sequence = ++lastSeqNumber;
  77. var context;
  78. if (typeof args[0] === 'string') {
  79. context = __assign({}, baseContext);
  80. }
  81. else {
  82. context = __assign({}, baseContext, args.shift());
  83. }
  84. var msg = args.shift();
  85. var logLevel = context[context_1.LogContexts.logLevel];
  86. var destTargets = logLevel == null ? targets : targets.filter(function (t) { return logLevel >= t.minLevel; });
  87. if (destTargets.length === 0) {
  88. return;
  89. }
  90. var message = util_1.format.apply(void 0, __spread([msg], args));
  91. var logMessage = {
  92. context: context,
  93. time: time,
  94. sequence: sequence,
  95. message: message,
  96. };
  97. if (logTranslator) {
  98. logMessage = logTranslator(logMessage);
  99. }
  100. destTargets.forEach(function (t) { return t.stream.write(t.format(logMessage) + "\n"); });
  101. };
  102. log.child = function (ctxOrTranslator) {
  103. var isTranslator = typeof ctxOrTranslator === 'function';
  104. var childContext = isTranslator ? __assign({}, baseContext) : __assign({}, baseContext, ctxOrTranslator);
  105. var translate;
  106. if (isTranslator) {
  107. if (logTranslator) {
  108. translate = function (msg) { return ctxOrTranslator(logTranslator(msg)); };
  109. }
  110. else {
  111. translate = ctxOrTranslator;
  112. }
  113. }
  114. else {
  115. translate = logTranslator;
  116. }
  117. return createLogger({ context: childContext, targets: targets, translate: translate });
  118. };
  119. log.wrap = function () {
  120. var args = [];
  121. for (var _i = 0; _i < arguments.length; _i++) {
  122. args[_i] = arguments[_i];
  123. }
  124. var _a;
  125. var _b = __read(Array(3 - args.length).concat(args), 3), ctx = _b[0], msg = _b[1], func = _b[2];
  126. var context = typeof ctx === 'number' ? __assign({}, baseContext, (_a = {}, _a[context_1.LogContexts.logLevel] = ctx, _a)) : __assign({}, baseContext, ctx);
  127. var logLevel = context[context_1.LogContexts.logLevel];
  128. if (typeof logLevel === 'number' && targets.every(function (t) { return t.minLevel > logLevel; })) {
  129. return func;
  130. }
  131. var message = msg == null ? "calling " + (func.name || '[anonymous]') + "()" : msg;
  132. return function wrapped() {
  133. var args = [];
  134. for (var _i = 0; _i < arguments.length; _i++) {
  135. args[_i] = arguments[_i];
  136. }
  137. log(__assign({ call: { args: args } }, context), message);
  138. return func.apply(this, args);
  139. };
  140. };
  141. level_1.LogLevelNames.forEach(function (name) {
  142. var _a;
  143. var level = level_1.LogLevels[name];
  144. var extraContext = (_a = {}, _a[context_1.LogContexts.logLevel] = level, _a);
  145. log[name] = function (ctxOrMsg) {
  146. var args = [];
  147. for (var _i = 1; _i < arguments.length; _i++) {
  148. args[_i - 1] = arguments[_i];
  149. }
  150. if (targets.length === 0 || targets.every(function (t) { return t.minLevel > level; })) {
  151. log[name] = createEmptyFunction();
  152. return;
  153. }
  154. if (typeof ctxOrMsg === 'string') {
  155. log.apply(void 0, __spread([extraContext, ctxOrMsg], args));
  156. }
  157. else {
  158. log.apply(void 0, __spread([__assign({}, ctxOrMsg, extraContext)], args));
  159. }
  160. };
  161. });
  162. return log;
  163. };
  164. exports.createLogger = createLogger;