logger.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // This is the **logger** module for *Karma*. It uses
  2. // [log4js](https://github.com/nomiddlename/log4js-node) to handle and
  3. // configure all logging that happens inside of *Karma*.
  4. // ### Helpers and Setup
  5. var log4js = require('log4js')
  6. var helper = require('./helper')
  7. var constant = require('./constants')
  8. // #### Public Functions
  9. // Setup the logger by passing in the configuration options. It needs
  10. // three arguments:
  11. //
  12. // setup(logLevel, colors, appenders)
  13. //
  14. // * `logLevel`: *String* Defines the global log level.
  15. // * `colors`: *Boolean* Use colors in the stdout or not.
  16. // * `appenders`: *Object* This will be passed as appenders to log4js
  17. // to allow for fine grained configuration of log4js. For more information
  18. // see https://github.com/nomiddlename/log4js-node.
  19. // *Array* is also accepted for backwards compatibility.
  20. var setup = function (level, colors, appenders) {
  21. // Turn color on/off on the console appenders with pattern layout
  22. var pattern = colors ? constant.COLOR_PATTERN : constant.NO_COLOR_PATTERN
  23. if (appenders) {
  24. // Convert Array to Object for backwards compatibility.
  25. if (appenders['map']) {
  26. if (appenders.length === 0) {
  27. appenders = [constant.CONSOLE_APPENDER]
  28. }
  29. const v1Appenders = appenders
  30. appenders = {}
  31. v1Appenders.forEach(function (appender, index) {
  32. if (appender.type === 'console') {
  33. appenders['console'] = appender
  34. if (helper.isDefined(appender.layout) && appender.layout.type === 'pattern') {
  35. appender.layout.pattern = pattern
  36. }
  37. } else {
  38. appenders[index + ''] = appender
  39. }
  40. return appender
  41. })
  42. }
  43. } else {
  44. appenders = {'console': constant.CONSOLE_APPENDER}
  45. }
  46. log4js.configure({
  47. appenders: appenders,
  48. categories: {
  49. 'default': {
  50. 'appenders': Object.keys(appenders),
  51. 'level': level
  52. }
  53. }
  54. })
  55. }
  56. // Setup the logger by passing in the config object. The function sets the
  57. // `colors` and `logLevel` if they are defined. It takes two arguments:
  58. //
  59. // setupFromConfig(config, appenders)
  60. //
  61. // * `config`: *Object* The configuration object.
  62. // * `appenders`: *Object* This will be passed as appenders to log4js
  63. // to allow for fine grained configuration of log4js. For more information
  64. // see https://github.com/nomiddlename/log4js-node.
  65. // *Array* is also accepted for backwards compatibility.
  66. var setupFromConfig = function (config, appenders) {
  67. var useColors = true
  68. var logLevel = constant.LOG_INFO
  69. if (helper.isDefined(config.colors)) {
  70. useColors = config.colors
  71. }
  72. if (helper.isDefined(config.logLevel)) {
  73. logLevel = config.logLevel
  74. }
  75. setup(logLevel, useColors, appenders)
  76. }
  77. const loggerCache = {}
  78. // Create a new logger. There are two optional arguments
  79. // * `name`, which defaults to `karma` and
  80. // If the `name = 'socket.io'` this will create a special wrapper
  81. // to be used as a logger for socket.io.
  82. // * `level`, which defaults to the global level.
  83. var create = function (name, level) {
  84. name = name || 'karma'
  85. var logger
  86. if (loggerCache.hasOwnProperty(name)) {
  87. logger = loggerCache[name]
  88. } else {
  89. logger = log4js.getLogger(name)
  90. loggerCache[name] = logger
  91. }
  92. if (helper.isDefined(level)) {
  93. logger.setLevel(level)
  94. }
  95. return logger
  96. }
  97. // #### Publish
  98. exports.create = create
  99. exports.setup = setup
  100. exports.setupFromConfig = setupFromConfig
  101. exports._rebindLog4js4testing = function (mockLog4js) {
  102. log4js = mockLog4js
  103. }