/// <summary> /// Initializes a new instance of the <see cref="LoggingConfig"/> class. /// </summary> /// <param name="configString">The config string.</param> /// <param name="createLogger">The create logger.</param> /// <param name="updateLogger">The update logger.</param> public LoggingConfig(string configString, CallbackCreateLogger createLogger, CallbackUpdateLogger updateLogger) { Load(configString, createLogger, updateLogger); InitializeCurrent(); }
/// <summary> /// Loads the specified config string. /// </summary> /// <example>Namespace1.Class1=*;Class2=off;Namespace1.Namespace2.Class3=Debug</example> /// <param name="configString">The config string.</param> /// <param name="createLogger">The create logger.</param> /// <param name="updateLogger">The update logger.</param> public virtual void Load(string configString, CallbackCreateLogger createLogger, CallbackUpdateLogger updateLogger) { m_value = configString; if (createLogger == null && m_createLogger == null) { createLogger = DefaultCallbackCreateLogger; } if (updateLogger == null && m_updateLogger == null) { updateLogger = DefaultCallbackUpdateLogger; } if (m_createLogger == null) { m_createLogger = createLogger; } if (m_updateLogger == null) { m_updateLogger = updateLogger; } DisableAllLoggers(); if (configString != null && Enabled) { string[] pieces = configString.Trim().Split(';', ','); if (pieces.Length == 1 && pieces[0] == "") { return; } foreach (string piece in pieces) { string[] parts = piece.Trim().Split('='); if (parts != null && parts.Length > 0 && parts.Length <= 2 && parts[0].Trim().Length > 0) { string key = parts[0].ToLower().Trim(); if (key == AllLoggersDesignatorSplat) { key = AllLoggersDesignator; } string val = parts.Length == 1 ? AllLoggersDesignatorSplat : parts[1]; LoggerSeverity threshold = GetLogValue(val); Logger logger; if (key == AllLoggersDesignator) { // Updating all loggers foreach (Logger logval in m_loggers.Values) { m_updateLogger(logval, threshold); PrepareLogger(threshold, logval); } } // See if the logger already exists if (m_loggers.TryGetValue(key, out logger)) { // Already exists m_updateLogger(logger, threshold); PrepareLogger(threshold, logger); } else { logger = m_createLogger(key, threshold); PostProcessNewLogger(key, threshold, logger); } } else { throw new ArgumentException(string.Format("Check format of log string ({0}).", piece)); } } } }
/// <summary> /// Gets the <see cref="PublicDomain.Logging.Logger"/> with the specified log class. /// </summary> /// <param name="logClasses">The log classes.</param> /// <returns></returns> /// <value></value> public virtual Logger CreateLogger(params string[] logClasses) { Logger result = null; Logger test; // First try the specific classes if (logClasses != null) { string logClass; for (int i = 0; i < logClasses.Length; i++) { logClass = logClasses[i].ToLower().Trim(); if (m_loggers.TryGetValue(logClass, out test)) { result = test; break; } } } // Lastly try the all designator if (result == null && m_loggers.TryGetValue(AllLoggersDesignator, out test)) { result = test; } if (result == null) { if (FallbackToNullLogger) { result = NullLogger.Current; } else { if (logClasses == null || logClasses.Length == 0) { throw new ArgumentNullException("Could not create fallback logger because no logClasses were specified"); } // A fallback logger is always turned off LoggerSeverity fallbackThreshold = OffValue; string key = logClasses[0]; if (m_createLogger == null) { m_createLogger = DefaultCallbackCreateLogger; } result = m_createLogger(key, fallbackThreshold); key = key.ToLower(); PostProcessNewLogger(key, fallbackThreshold, result); UpdatePeerLoggers(logClasses, result, key); } } return result; }
/// <summary> /// Gets the <see cref="Utilities.Logging.Logger"/> with the specified log class. /// </summary> /// <param name="logClasses">The log classes.</param> /// <returns></returns> /// <value></value> public virtual Logger CreateLogger(params string[] logClasses) { Logger result = null; Logger test; string testClass; // First try the specific classes if (logClasses != null) { foreach (string logClass in logClasses) { testClass = logClass.ToLower().Trim(); if (m_loggers.TryGetValue(testClass, out test)) { result = test; break; } } } // Lastly try the all designator if (result == null && m_loggers.TryGetValue(AllLoggersDesignator, out test)) { result = test; } if (result == null) { if (FallbackToNullLogger) { result = NullLogger.Current; } else { if (logClasses.Length == 0) { throw new ArgumentNullException("Could not create fallback logger because no logClasses were specified"); } // A fallback logger is always turned off LoggerSeverity fallbackThreshold = OffValue; string key = logClasses[0]; if (m_createLogger == null) { m_createLogger = DefaultCallbackCreateLogger; } result = m_createLogger(key, fallbackThreshold); key = key.ToLower(); PostProcessNewLogger(key, fallbackThreshold, result); for (int i = 1; i < logClasses.Length; i++) { m_loggers[logClasses[i]] = result; } } } return(result); }
/// <summary> /// Loads the specified config string. /// </summary> /// <example>Namespace1.Class1=*;Class2=off;Namespace1.Namespace2.Class3=Debug</example> /// <param name="configString">The config string.</param> /// <param name="createLogger">The create logger.</param> /// <param name="updateLogger">The update logger.</param> public virtual void Load(string configString, CallbackCreateLogger createLogger, CallbackUpdateLogger updateLogger) { m_value = configString; if (createLogger == null) { createLogger = DefaultCallbackCreateLogger; } if (updateLogger == null) { updateLogger = DefaultCallbackUpdateLogger; } m_createLogger = createLogger; m_updateLogger = updateLogger; DisableAllLoggers(); if (configString != null && Enabled) { string[] pieces = configString.Trim().Split(';', ','); if (pieces.Length == 1 && pieces[0] == "") { return; } foreach (string piece in pieces) { string[] parts = piece.Trim().Split('='); if (parts != null && parts.Length > 0 && parts.Length <= 2 && parts[0].Trim().Length > 0) { string key = parts[0].ToLower().Trim(); if (key == AllLoggersDesignatorSplat) { key = AllLoggersDesignator; } string val = parts.Length == 1 ? AllLoggersDesignatorSplat : parts[1]; LoggerSeverity threshold = GetLogValue(val); Logger logger; // See if the logger already exists if (m_loggers.TryGetValue(key, out logger)) { // Already exists m_updateLogger(logger, threshold); PrepareLogger(threshold, logger); } else { logger = m_createLogger(key, threshold); PostProcessNewLogger(key, threshold, logger); } } else { throw new ArgumentException(string.Format("Check format of log string ({0}).", piece)); } } } }