@ -67,25 +67,25 @@ function getLogger (categoryName) {
// Use default logger if categoryName is not specified or invalid
if ( ! ( typeof categoryName == "string" ) ) {
categoryName = DEFAULT _CATEGORY ;
categoryName = DEFAULT _CATEGORY ;
}
var appenderList ;
if ( ! loggers [ categoryName ] ) {
// Create the logger for this name if it doesn't already exist
loggers [ categoryName ] = new Logger ( categoryName ) ;
if ( appenders [ categoryName ] ) {
appenderList = appenders [ categoryName ] ;
appenderList . forEach ( function ( appender ) {
loggers [ categoryName ] . addListener ( "log" , appender ) ;
} ) ;
}
if ( appenders [ ALL _CATEGORIES ] ) {
appenderList = appenders [ ALL _CATEGORIES ] ;
appenderList . forEach ( function ( appender ) {
loggers [ categoryName ] . addListener ( "log" , appender ) ;
} ) ;
}
// Create the logger for this name if it doesn't already exist
loggers [ categoryName ] = new Logger ( categoryName ) ;
if ( appenders [ categoryName ] ) {
appenderList = appenders [ categoryName ] ;
appenderList . forEach ( function ( appender ) {
loggers [ categoryName ] . addListener ( "log" , appender ) ;
} ) ;
}
if ( appenders [ ALL _CATEGORIES ] ) {
appenderList = appenders [ ALL _CATEGORIES ] ;
appenderList . forEach ( function ( appender ) {
loggers [ categoryName ] . addListener ( "log" , appender ) ;
} ) ;
}
}
return loggers [ categoryName ] ;
@ -98,65 +98,69 @@ function addAppender () {
var args = Array . prototype . slice . call ( arguments ) ;
var appender = args . shift ( ) ;
if ( args . length == 0 || args [ 0 ] === undefined ) {
args = [ ALL _CATEGORIES ] ;
args = [ ALL _CATEGORIES ] ;
}
//argument may already be an array
if ( Array . isArray ( args [ 0 ] ) ) {
args = args [ 0 ] ;
args = args [ 0 ] ;
}
args . forEach ( function ( category ) {
if ( ! appenders [ category ] ) {
appenders [ category ] = [ ] ;
}
appenders [ category ] . push ( appender ) ;
if ( category === ALL _CATEGORIES ) {
for ( var logger in loggers ) {
if ( loggers . hasOwnProperty ( logger ) ) {
loggers [ logger ] . addListener ( "log" , appender ) ;
}
}
} else if ( loggers [ category ] ) {
loggers [ category ] . addListener ( "log" , appender ) ;
}
if ( ! appenders [ category ] ) {
appenders [ category ] = [ ] ;
}
appenders [ category ] . push ( appender ) ;
if ( category === ALL _CATEGORIES ) {
for ( var logger in loggers ) {
if ( loggers . hasOwnProperty ( logger ) ) {
loggers [ logger ] . addListener ( "log" , appender ) ;
}
}
} else if ( loggers [ category ] ) {
loggers [ category ] . addListener ( "log" , appender ) ;
}
} ) ;
}
function clearAppenders ( ) {
appenders = { } ;
for ( var logger in loggers ) {
if ( loggers . hasOwnProperty ( logger ) ) {
loggers [ logger ] . removeAllListeners ( "log" ) ;
}
if ( loggers . hasOwnProperty ( logger ) ) {
loggers [ logger ] . removeAllListeners ( "log" ) ;
}
}
}
function configureAppenders ( appenderList ) {
clearAppenders ( ) ;
if ( appenderList ) {
appenderList . forEach ( function ( appenderConfig ) {
appenderList . forEach ( function ( appenderConfig ) {
var appender ;
appenderConfig . makers = appenderMakers ;
appender = appenderMakers [ appenderConfig . type ] ( appenderConfig ) ;
if ( appender ) {
addAppender ( appender , appenderConfig . category ) ;
} else {
throw new Error ( "log4js configuration problem for " + sys . inspect ( appenderConfig ) ) ;
}
} ) ;
appender = appenderMakers [ appenderConfig . type ] ( appenderConfig ) ;
if ( appender ) {
addAppender ( appender , appenderConfig . category ) ;
} else {
throw new Error ( "log4js configuration problem for " + sys . inspect ( appenderConfig ) ) ;
}
} ) ;
} else {
addAppender ( consoleAppender ( ) ) ;
addAppender ( consoleAppender ( ) ) ;
}
}
function configureLevels ( levels ) {
if ( levels ) {
for ( var category in levels ) {
if ( levels . hasOwnProperty ( category ) ) {
getLogger ( category ) . setLevel ( levels [ category ] ) ;
}
}
for ( var category in levels ) {
if ( levels . hasOwnProperty ( category ) ) {
getLogger ( category ) . setLevel ( levels [ category ] ) ;
}
}
} else {
for ( l in loggers ) {
loggers [ l ] . setLevel ( ) ;
}
}
}
@ -214,18 +218,18 @@ Logger.prototype.isLevelEnabled = function(otherLevel) {
[ 'Trace' , 'Debug' , 'Info' , 'Warn' , 'Error' , 'Fatal' ] . forEach (
function ( levelString ) {
var level = levels . toLevel ( levelString ) ;
Logger . prototype [ 'is' + levelString + 'Enabled' ] = function ( ) {
return this . isLevelEnabled ( level ) ;
} ;
var level = levels . toLevel ( levelString ) ;
Logger . prototype [ 'is' + levelString + 'Enabled' ] = function ( ) {
return this . isLevelEnabled ( level ) ;
} ;
Logger . prototype [ levelString . toLowerCase ( ) ] = function ( ) {
if ( this . isLevelEnabled ( level ) ) {
Logger . prototype [ levelString . toLowerCase ( ) ] = function ( ) {
if ( this . isLevelEnabled ( level ) ) {
var args = Array . prototype . slice . call ( arguments ) ;
args . unshift ( level ) ;
Logger . prototype . log . apply ( this , args ) ;
}
} ;
}
} ;
}
) ;
@ -242,21 +246,6 @@ function getDefaultLogger () {
return getLogger ( DEFAULT _CATEGORY ) ;
}
function configure ( configurationFileOrObject ) {
var config = configurationFileOrObject ;
if ( typeof ( config ) === "string" ) {
config = JSON . parse ( fs . readFileSync ( config , "utf8" ) ) ;
}
if ( config ) {
try {
configureAppenders ( config . appenders ) ;
configureLevels ( config . levels ) ;
} catch ( e ) {
throw new Error ( "Problem reading log4js config " + sys . inspect ( config ) + ". Error was \"" + e . message + "\" (" + e . stack + ")" ) ;
}
}
}
function findConfiguration ( ) {
//add current directory onto the list of configPaths
var paths = [ '.' ] . concat ( require . paths ) ;
@ -276,6 +265,79 @@ function findConfiguration() {
return undefined ;
}
function loadConfigurationFile ( filename ) {
filename = filename || findConfiguration ( ) ;
if ( filename ) {
return JSON . parse ( fs . readFileSync ( filename , "utf8" ) ) ;
}
return undefined ;
}
function configureOnceOff ( config ) {
if ( config ) {
try {
configureAppenders ( config . appenders ) ;
configureLevels ( config . levels ) ;
} catch ( e ) {
throw new Error ( "Problem reading log4js config " + sys . inspect ( config ) + ". Error was \"" + e . message + "\" (" + e . stack + ")" ) ;
}
}
}
var configState = { } ;
function reloadConfiguration ( ) {
var filename = configState . filename || findConfiguration ( ) ,
mtime ;
if ( ! filename ) {
// can't find anything to reload
return ;
}
try {
mtime = fs . statSync ( filename ) . mtime ;
} catch ( e ) {
getLogger ( 'log4js' ) . warn ( 'Failed to load configuration file ' + filename ) ;
return ;
}
if ( configState . lastFilename && configState . lastFilename === filename ) {
if ( mtime . getTime ( ) > configState . lastMTime . getTime ( ) ) {
configState . lastMTime = mtime ;
} else {
filename = null ;
}
} else {
configState . lastFilename = filename ;
configState . lastMTime = mtime ;
}
configureOnceOff ( loadConfigurationFile ( filename ) ) ;
}
function initReloadConfiguration ( filename , options ) {
if ( configState . timerId ) {
clearInterval ( configState . timerId ) ;
delete configState . timerId ;
}
configState . filename = filename ;
configState . timerId = setInterval ( reloadConfiguration , options . reloadSecs * 1000 ) ;
}
function configure ( configurationFileOrObject , options ) {
var config = configurationFileOrObject ;
if ( config === undefined || config === null || typeof ( config ) === 'string' ) {
options = options || { reloadSecs : 60 } ;
if ( options . reloadSecs ) {
initReloadConfiguration ( config , options ) ;
}
configureOnceOff ( loadConfigurationFile ( config ) ) ;
} else {
options = options || { } ;
if ( options . reloadSecs ) {
getLogger ( 'log4js' ) . warn ( 'Ignoring configuration reload parameter for "object" configuration.' ) ;
}
configureOnceOff ( config ) ;
}
}
function replaceConsole ( logger ) {
function replaceWith ( fn ) {
return function ( ) {