@@ -17,29 +17,45 @@ var constant = require('./constants')
1717//
1818// * `logLevel`: *String* Defines the global log level.
1919// * `colors`: *Boolean* Use colors in the stdout or not.
20- // * `appenders`: *Array* This will be passed as appenders to log4js
20+ // * `appenders`: *Object* This will be passed as appenders to log4js
2121// to allow for fine grained configuration of log4js. For more information
2222// see https://github.com/nomiddlename/log4js-node.
23+ // *Array* is also accepted for backwards compatibility.
2324var setup = function ( level , colors , appenders ) {
2425 // Turn color on/off on the console appenders with pattern layout
2526 var pattern = colors ? constant . COLOR_PATTERN : constant . NO_COLOR_PATTERN
26-
27- // If there are no appenders use the default one
28- appenders = helper . isDefined ( appenders ) ? appenders : [ constant . CONSOLE_APPENDER ]
29-
30- appenders = appenders . map ( function ( appender ) {
31- if ( appender . type === 'console' ) {
32- if ( helper . isDefined ( appender . layout ) && appender . layout . type === 'pattern' ) {
33- appender . layout . pattern = pattern
27+ if ( appenders ) {
28+ // Convert Array to Object for backwards compatibility.
29+ if ( appenders [ 'map' ] ) {
30+ if ( appenders . length === 0 ) {
31+ appenders = [ constant . CONSOLE_APPENDER ]
3432 }
33+ const v1Appenders = appenders
34+ appenders = { }
35+ v1Appenders . forEach ( function ( appender , index ) {
36+ if ( appender . type === 'console' ) {
37+ appenders [ 'console' ] = appender
38+ if ( helper . isDefined ( appender . layout ) && appender . layout . type === 'pattern' ) {
39+ appender . layout . pattern = pattern
40+ }
41+ } else {
42+ appenders [ index + '' ] = appender
43+ }
44+ return appender
45+ } )
3546 }
36- return appender
37- } )
47+ } else {
48+ appenders = { 'console' : constant . CONSOLE_APPENDER }
49+ }
3850
39- // Pass the values to log4js
40- log4js . setGlobalLogLevel ( level )
4151 log4js . configure ( {
42- appenders : appenders
52+ appenders : appenders ,
53+ categories : {
54+ 'default' : {
55+ 'appenders' : Object . keys ( appenders ) ,
56+ 'level' : level
57+ }
58+ }
4359 } )
4460}
4561
@@ -49,9 +65,10 @@ var setup = function (level, colors, appenders) {
4965// setupFromConfig(config, appenders)
5066//
5167// * `config`: *Object* The configuration object.
52- // * `appenders`: *Array* This will be passed as appenders to log4js
68+ // * `appenders`: *Object* This will be passed as appenders to log4js
5369// to allow for fine grained configuration of log4js. For more information
5470// see https://github.com/nomiddlename/log4js-node.
71+ // *Array* is also accepted for backwards compatibility.
5572var setupFromConfig = function ( config , appenders ) {
5673 var useColors = true
5774 var logLevel = constant . LOG_INFO
@@ -66,13 +83,22 @@ var setupFromConfig = function (config, appenders) {
6683 setup ( logLevel , useColors , appenders )
6784}
6885
86+ const loggerCache = { }
87+
6988// Create a new logger. There are two optional arguments
7089// * `name`, which defaults to `karma` and
7190// If the `name = 'socket.io'` this will create a special wrapper
7291// to be used as a logger for socket.io.
7392// * `level`, which defaults to the global level.
7493var create = function ( name , level ) {
75- var logger = log4js . getLogger ( name || 'karma' )
94+ name = name || 'karma'
95+ var logger
96+ if ( loggerCache . hasOwnProperty ( name ) ) {
97+ logger = loggerCache [ name ]
98+ } else {
99+ logger = log4js . getLogger ( name )
100+ loggerCache [ name ] = logger
101+ }
76102 if ( helper . isDefined ( level ) ) {
77103 logger . setLevel ( level )
78104 }
@@ -84,3 +110,6 @@ var create = function (name, level) {
84110exports . create = create
85111exports . setup = setup
86112exports . setupFromConfig = setupFromConfig
113+ exports . _rebindLog4js4testing = function ( mockLog4js ) {
114+ log4js = mockLog4js
115+ }
0 commit comments