private static Logger CreateDefaultLogger(ref LoggerCacheKey cacheKey) { cacheKey = new LoggerCacheKey(cacheKey.Name, typeof(Logger)); var newLogger = new Logger(); return(newLogger); }
private Logger GetLogger(LoggerCacheKey cacheKey) { lock (syncRoot) { Logger existingLogger = loggerCache.Retrieve(cacheKey); if (existingLogger != null) { return(existingLogger); } Logger newLogger; if (cacheKey.ConcreteType != null && cacheKey.ConcreteType != typeof(Logger)) { string fullName = cacheKey.ConcreteType.FullName; try { if (cacheKey.ConcreteType.IsStaticClass()) { string errorMessage = $"GetLogger / GetCurrentClassLogger is '{fullName}' as loggerType can be a static class and should inherit from Logger"; Trace.TraceError(errorMessage); newLogger = CreateDefaultLogger(ref cacheKey); } else { var instance = FactoryHelper.CreateInstance(cacheKey.ConcreteType); newLogger = instance as Logger; if (newLogger == null) { string errorMessage = $"GetLogger / GetCurrentClassLogger got '{fullName}' as loggerType which doesn't inherit from Logger"; Trace.TraceError(errorMessage); newLogger = CreateDefaultLogger(ref cacheKey); } } } catch (Exception ex) { Trace.TraceError($"GetLogger / GetCurrentClassLogger. Cannot create instance of type '{fullName}'. It should have an default contructor. ex:{ex}"); newLogger = CreateDefaultLogger(ref cacheKey); } } else { newLogger = new Logger(); } if (cacheKey.ConcreteType != null) { newLogger.Initialize(cacheKey.Name, this); } loggerCache.InsertOrUpdate(cacheKey, newLogger); return(newLogger); } }
public Logger Retrieve(LoggerCacheKey cacheKey) { WeakReference loggerReference; if (loggerCache.TryGetValue(cacheKey, out loggerReference)) { return(loggerReference.Target as Logger); } return(null); }
public void InsertOrUpdate(LoggerCacheKey cacheKey, Logger logger) { loggerCache[cacheKey] = new WeakReference(logger); }