transport.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. 'use strict';
  2. const os = require('os');
  3. const utils = require('../utils');
  4. const levels = require('../level');
  5. const ENABLED = Symbol('Transport#enabled');
  6. /**
  7. * Transport is an output channel of the log that can be output to a file, console or service.
  8. * A {@link Logger} can configure multiple Transports to meet a variety of complex needs
  9. */
  10. class Transport {
  11. /**
  12. * @class
  13. * @param {Object} options
  14. * - {String} [level = NONE] - log level. ouput method must higher than this option. if level is `info`, `debug` will disabled
  15. * - {Function} formatter - format function
  16. * - {Function} contextFormatter - format function for context logger
  17. * - {Boolean} [json = false] - log format is json or not
  18. * - {String} [encoding = utf8] - log encodeing, see {@link https://github.com/ashtuchkin/iconv-lite#supported-encodings}
  19. * - {String} [eol = os.EOL] - end of line
  20. */
  21. constructor(options) {
  22. this.options = utils.assign(this.defaults, options);
  23. if (this.options.encoding === 'utf-8') {
  24. this.options.encoding = 'utf8';
  25. }
  26. this.options.level = utils.normalizeLevel(this.options.level);
  27. this[ENABLED] = true;
  28. }
  29. get defaults() {
  30. return {
  31. level: 'NONE',
  32. formatter: null,
  33. contextFormatter: null,
  34. json: false,
  35. encoding: 'utf8',
  36. eol: os.EOL,
  37. };
  38. }
  39. /**
  40. * enable or not
  41. * @return {[type]} [description]
  42. */
  43. get enabled() {
  44. return this[ENABLED];
  45. }
  46. /**
  47. * enable transport
  48. */
  49. enable() {
  50. this[ENABLED] = true;
  51. }
  52. /**
  53. * disable transport
  54. */
  55. disable() {
  56. this[ENABLED] = false;
  57. }
  58. set level(level) {
  59. this.options.level = utils.normalizeLevel(level);
  60. }
  61. get level() {
  62. return this.options.level;
  63. }
  64. /**
  65. * should output log or not
  66. * @param {String} level log level, must in upper case
  67. * @return {Boolean} should or not
  68. */
  69. shouldLog(level) {
  70. if (!this[ENABLED]) {
  71. return false;
  72. }
  73. if (this.options.level === levels['NONE']) {
  74. return false;
  75. }
  76. return this.options.level <= levels[level];
  77. }
  78. /**
  79. * Transport log method
  80. * @param {String} level - log level
  81. * @param {Array} args - all methods
  82. * @param {Object} meta - meta infomations
  83. * @return {Buffer|String} log message
  84. * - empty string means no log
  85. * - utf8 encoding return String
  86. * - other encoding return Buffer
  87. */
  88. log(level, args, meta) {
  89. return utils.format(level, args, meta, this.options);
  90. }
  91. /**
  92. * reload Transport
  93. */
  94. reload() {}
  95. /**
  96. * close Transport
  97. */
  98. close() {}
  99. end() {}
  100. }
  101. module.exports = Transport;