// This is the **logger** module for *Karma*. It uses
// [log4js](https://github.com/nomiddlename/log4js-node) to handle and
// configure all logging that happens inside of *Karma*.

// ### Helpers and Setup

var log4js = require('log4js')
var helper = require('./helper')
var constant = require('./constants')

// #### Public Functions

// Setup the logger by passing in the configuration options. It needs
// three arguments:
//
//     setup(logLevel, colors, appenders)
//
// * `logLevel`: *String* Defines the global log level.
// * `colors`: *Boolean* Use colors in the stdout or not.
// * `appenders`: *Array* This will be passed as appenders to log4js
//   to allow for fine grained configuration of log4js. For more information
//   see https://github.com/nomiddlename/log4js-node.
var setup = function (level, colors, appenders) {
  // Turn color on/off on the console appenders with pattern layout
  var pattern = colors ? constant.COLOR_PATTERN : constant.NO_COLOR_PATTERN

  // If there are no appenders use the default one
  appenders = helper.isDefined(appenders) ? appenders : [constant.CONSOLE_APPENDER]

  appenders = appenders.map(function (appender) {
    if (appender.type === 'console') {
      if (helper.isDefined(appender.layout) && appender.layout.type === 'pattern') {
        appender.layout.pattern = pattern
      }
    }
    return appender
  })

  // Pass the values to log4js
  log4js.setGlobalLogLevel(level)
  log4js.configure({
    appenders: appenders
  })
}

// Create a new logger. There are two optional arguments
// * `name`, which defaults to `karma` and
//   If the `name = 'socket.io'` this will create a special wrapper
//   to be used as a logger for socket.io.
// * `level`, which defaults to the global level.
var create = function (name, level) {
  var logger = log4js.getLogger(name || 'karma')
  if (helper.isDefined(level)) {
    logger.setLevel(level)
  }
  return logger
}

// #### Publish

exports.create = create
exports.setup = setup

@@ -1489,16 +1489,770 @@
   %7D)%0A%7D%0A%0A
+// Setup the logger by passing in the config object. The function sets the%0A// %60colors%60 and %60logLevel%60 if they are defined. It takes two arguments:%0A//%0A//     setupFromConfig(config, appenders)%0A//%0A// * %60config%60: *Object* The configuration object.%0A// * %60appenders%60: *Array* This will be passed as appenders to log4js%0A//   to allow for fine grained configuration of log4js. For more information%0A//   see https://github.com/nomiddlename/log4js-node.%0Avar setupFromConfig = function (config, appenders) %7B%0A  var useColors = true%0A  var logLevel = constant.LOG_INFO%0A%0A  if (helper.isDefined(config.colors)) %7B%0A    useColors = config.colors%0A  %7D%0A%0A  if (helper.isDefined(config.logLevel)) %7B%0A    logLevel = config.logLevel%0A  %7D%0A  setup(logLevel, useColors, appenders)%0A%7D%0A%0A
 // Creat
@@ -2733,12 +2733,54 @@
 tup = setup%0A
+exports.setupFromConfig = setupFromConfig%0A

Add logging-setup function