winston.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /**
  2. * winston.js: Top-level include defining Winston.
  3. *
  4. * (C) 2010 Charlie Robbins
  5. * MIT LICENCE
  6. */
  7. 'use strict';
  8. const logform = require('logform');
  9. const { warn } = require('./winston/common');
  10. /**
  11. * Expose version. Use `require` method for `webpack` support.
  12. * @type {string}
  13. */
  14. exports.version = require('../package.json').version;
  15. /**
  16. * Include transports defined by default by winston
  17. * @type {Array}
  18. */
  19. exports.transports = require('./winston/transports');
  20. /**
  21. * Expose utility methods
  22. * @type {Object}
  23. */
  24. exports.config = require('./winston/config');
  25. /**
  26. * Hoist format-related functionality from logform.
  27. * @type {Object}
  28. */
  29. exports.addColors = logform.levels;
  30. /**
  31. * Hoist format-related functionality from logform.
  32. * @type {Object}
  33. */
  34. exports.format = logform.format;
  35. /**
  36. * Expose core Logging-related prototypes.
  37. * @type {function}
  38. */
  39. exports.createLogger = require('./winston/create-logger');
  40. /**
  41. * Expose core Logging-related prototypes.
  42. * @type {function}
  43. */
  44. exports.Logger = require('./winston/logger');
  45. /**
  46. * Expose core Logging-related prototypes.
  47. * @type {Object}
  48. */
  49. exports.ExceptionHandler = require('./winston/exception-handler');
  50. /**
  51. * Expose core Logging-related prototypes.
  52. * @type {Object}
  53. */
  54. exports.RejectionHandler = require('./winston/rejection-handler');
  55. /**
  56. * Expose core Logging-related prototypes.
  57. * @type {Container}
  58. */
  59. exports.Container = require('./winston/container');
  60. /**
  61. * Expose core Logging-related prototypes.
  62. * @type {Object}
  63. */
  64. exports.Transport = require('winston-transport');
  65. /**
  66. * We create and expose a default `Container` to `winston.loggers` so that the
  67. * programmer may manage multiple `winston.Logger` instances without any
  68. * additional overhead.
  69. * @example
  70. * // some-file1.js
  71. * const logger = require('winston').loggers.get('something');
  72. *
  73. * // some-file2.js
  74. * const logger = require('winston').loggers.get('something');
  75. */
  76. exports.loggers = new exports.Container();
  77. /**
  78. * We create and expose a 'defaultLogger' so that the programmer may do the
  79. * following without the need to create an instance of winston.Logger directly:
  80. * @example
  81. * const winston = require('winston');
  82. * winston.log('info', 'some message');
  83. * winston.error('some error');
  84. */
  85. const defaultLogger = exports.createLogger();
  86. // Pass through the target methods onto `winston.
  87. Object.keys(exports.config.npm.levels)
  88. .concat([
  89. 'log',
  90. 'query',
  91. 'stream',
  92. 'add',
  93. 'remove',
  94. 'clear',
  95. 'profile',
  96. 'startTimer',
  97. 'handleExceptions',
  98. 'unhandleExceptions',
  99. 'handleRejections',
  100. 'unhandleRejections',
  101. 'configure',
  102. 'child'
  103. ])
  104. .forEach(
  105. method => (exports[method] = (...args) => defaultLogger[method](...args))
  106. );
  107. /**
  108. * Define getter / setter for the default logger level which need to be exposed
  109. * by winston.
  110. * @type {string}
  111. */
  112. Object.defineProperty(exports, 'level', {
  113. get() {
  114. return defaultLogger.level;
  115. },
  116. set(val) {
  117. defaultLogger.level = val;
  118. }
  119. });
  120. /**
  121. * Define getter for `exceptions` which replaces `handleExceptions` and
  122. * `unhandleExceptions`.
  123. * @type {Object}
  124. */
  125. Object.defineProperty(exports, 'exceptions', {
  126. get() {
  127. return defaultLogger.exceptions;
  128. }
  129. });
  130. /**
  131. * Define getters / setters for appropriate properties of the default logger
  132. * which need to be exposed by winston.
  133. * @type {Logger}
  134. */
  135. ['exitOnError'].forEach(prop => {
  136. Object.defineProperty(exports, prop, {
  137. get() {
  138. return defaultLogger[prop];
  139. },
  140. set(val) {
  141. defaultLogger[prop] = val;
  142. }
  143. });
  144. });
  145. /**
  146. * The default transports and exceptionHandlers for the default winston logger.
  147. * @type {Object}
  148. */
  149. Object.defineProperty(exports, 'default', {
  150. get() {
  151. return {
  152. exceptionHandlers: defaultLogger.exceptionHandlers,
  153. rejectionHandlers: defaultLogger.rejectionHandlers,
  154. transports: defaultLogger.transports
  155. };
  156. }
  157. });
  158. // Have friendlier breakage notices for properties that were exposed by default
  159. // on winston < 3.0.
  160. warn.deprecated(exports, 'setLevels');
  161. warn.forFunctions(exports, 'useFormat', ['cli']);
  162. warn.forProperties(exports, 'useFormat', ['padLevels', 'stripColors']);
  163. warn.forFunctions(exports, 'deprecated', [
  164. 'addRewriter',
  165. 'addFilter',
  166. 'clone',
  167. 'extend'
  168. ]);
  169. warn.forProperties(exports, 'deprecated', ['emitErrs', 'levelLength']);