From 9897dcbc9306cbaf6bbae3e04b30f0f16b431f54 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Mon, 5 Aug 2013 11:19:53 +1000 Subject: [PATCH] trying out weak references, don't think they're going to help --- lib/log4js.js | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/log4js.js b/lib/log4js.js index 9f4370c..22ac913 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -44,6 +44,7 @@ * Website: http://log4js.berlios.de */ var debug = require('./debug')('core') +, weak = require('weak') , fs = require('fs') , path = require('path') , util = require('util') @@ -51,7 +52,9 @@ var debug = require('./debug')('core') , levels = require('./levels') , LoggingEvent = require('./logger').LoggingEvent , Logger = require('./logger').Logger +, loggerRefs = [] , categoryLevels = {} +, globalLogLevel = null , ALL_CATEGORIES = '[all]' , appenders = {} , appenderMakers = {} @@ -63,21 +66,31 @@ var debug = require('./debug')('core') }; /** - * Get a logger instance. Instance is cached on categoryName level. + * Get a logger instance. * @param {String} categoryName name of category to log to. * @return {Logger} instance of logger for the category * @static */ function getLogger (categoryName) { + var level, logger, ref; // Use default logger if categoryName is not specified or invalid if (typeof categoryName !== "string") { categoryName = Logger.DEFAULT_CATEGORY; } - debug("getLogger(" + categoryName + ")"); + level = categoryLevels[categoryName]; - return new Logger(categoryName, categoryLevels[categoryName] || null, dispatch); + if (globalLogLevel) { + level = globalLogLevel; + } + + debug("getLogger(" + categoryName + ") - level is " + level); + logger = new Logger(categoryName, level || null, dispatch); + ref = weak(logger); + loggerRefs.push(ref); + + return logger; } /** @@ -134,7 +147,16 @@ function configureLevels(levels) { } function setGlobalLogLevel(level) { - Logger.prototype.level = levels.toLevel(level, levels.TRACE); + //Logger.prototype.level = levels.toLevel(level, levels.TRACE); + globalLogLevel = level; + var workingRefs = []; + loggerRefs.forEach(function(logger) { + if (logger.setLevel) { + workingRefs.push(logger); + logger.setLevel(level); + } + }); + loggerRefs = workingRefs; } /**