/// <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>
 /// 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>
        /// 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));
                    }
                }
            }
        }