public AppInsightsLogger(
     AppInsightsLoggerProvider provider,
     string categoryName = null)
 {
     _provider        = provider;
     _transform       = provider.PopulateLogTelemetry;
     _telemetryClient = provider.Client;
     _categoryName    = categoryName ?? DefaultCategoryName;
 }
        private void LoadConfiguration(ILogger logger)
        {
            // Populate Logging info to ITelemetry
            var populateTypeConfig       = new AssemblyInfoConfig();
            var populateTelemetrySection = _config.GetSection(AppInsightsLoggingConfig.ApplicationInsightsSection)
                                           .GetSection(AppInsightsLoggingConfig.PopulateTelemetry);

            foreach (var populateItem in populateTelemetrySection.GetChildren())
            {
                populateItem.Bind(populateTypeConfig);
            }

            // Using Reflection, get the IPopulateTelemetry function
            var factoryType = Type.GetType(populateTypeConfig.ClassAssembly, throwOnError: true);

            PopulateLogTelemetry = Activator.CreateInstance(factoryType) as IPopulateTelemetry;

            // Read Logging Levels
            var levels = _config.GetSection(AppInsightsLoggingConfig.ApplicationInsightsSection)?
                         .GetSection(LoggingSettingsConfig.LogLevelSection);

            var      dictLogLevel = new Dictionary <string, LogLevel>();
            LogLevel defaultLevel = LogLevel.Warning;

            if (levels != null)
            {
                foreach (var k in levels.GetChildren())
                {
                    LogLevel level;
                    if (Enum.TryParse(k.Value, true, out level))
                    {
                        dictLogLevel.Add(k.Key, level);
                    }
                    else
                    {
                        dictLogLevel.Add(k.Key, LogLevel.Warning);
                    }
                }

                if (dictLogLevel.ContainsKey("Default"))
                {
                    defaultLevel = dictLogLevel["Default"];
                    dictLogLevel.Remove("Default");
                }
            }

            _levels       = dictLogLevel.ToImmutableDictionary();
            _defaultLevel = defaultLevel;
        }