//Get an instance of a logger for a file name public static TextFileLogger GetTextFileLogger(string fileName, bool overriteExisting) { TextFileLogger loggerToReturn = null; lock (loggerTable) { if (loggerTable.ContainsKey(fileName)) { TextLoggerData data = (TextLoggerData)loggerTable[fileName]; data.NumberOfReferences += 1; loggerToReturn = data.LoggerInstance; } else { TextFileLogger logger = new TextFileLogger(); logger.LogFileName = fileName; logger.Init(overriteExisting); TextLoggerData loggerData = new TextLoggerData(); loggerData.NumberOfReferences = 1; loggerData.LoggerInstance = logger; loggerToReturn = logger; loggerTable.Add(fileName, logger); } } return(loggerToReturn); }
//Close the instance of the logger, make sure to call this otherwise we leak an instance public static void CloseLogger(string fileName) { lock (loggerTable) { if (loggerTable.ContainsKey(fileName)) { TextLoggerData data = (TextLoggerData)loggerTable[fileName]; data.NumberOfReferences -= 1; if (data.NumberOfReferences == 0) { data.LoggerInstance.CloseLog(); //remove references data.LoggerInstance = null; data = null; //cleanup the entry form the table loggerTable.Remove(fileName); } } } }