private Logger GetLogger(LoggerCacheKey cacheKey)
{
lock (this)
{
WeakReference l;
if (this.loggerCache.TryGetValue(cacheKey, out l))
{
Logger existingLogger = l.Target as Logger;
if (existingLogger != null)
{
// logger in the cache and still referenced
return existingLogger;
}
}
Logger newLogger;
if (cacheKey.ConcreteType != null && cacheKey.ConcreteType != typeof(Logger))
{
newLogger = (Logger)FactoryHelper.CreateInstance(cacheKey.ConcreteType);
}
else
{
newLogger = new Logger();
}
if (cacheKey.ConcreteType != null)
{
newLogger.Initialize(cacheKey.Name, this.GetConfigurationForLogger(cacheKey.Name, this.Configuration), this);
}
this.loggerCache[cacheKey] = new WeakReference(newLogger);
return newLogger;
}
}