public ShaolinqErrorLog(IDictionary config)
		{
			var dataAccessModelTypeName = config.Find("dataAccessModelType", string.Empty);

			if (string.IsNullOrEmpty(dataAccessModelTypeName))
			{
				throw new ApplicationException("DataAccessModelType not specified");
			}

			var modelType = Type.GetType(dataAccessModelTypeName);

			if (modelType == null)
			{
				throw new ApplicationException($"Could not find type {dataAccessModelTypeName}");
			}

			if (!modelType.GetInterfaces().Contains(typeof(IElmahDataAccessModel)))
			{
				throw new ApplicationException("DataAccessModelType must implement IElmahDataAccessModel");
			}

			var dataAccessModelConfigSection = config.Find("dataAccessModelConfigSection", modelType.Name);

			var dataAccessModelConfiguration = ConfigurationBlock<DataAccessModelConfiguration>.Load(dataAccessModelConfigSection);

			this.dataModel = (IElmahDataAccessModel)DataAccessModel.BuildDataAccessModel(
				Type.GetType(dataAccessModelTypeName),
				dataAccessModelConfiguration);

			// Set the application name as this implementation provides per-application isolation over a single store.
			// Use application name of "*" to disable per-application isolation.
			var appName = config.Find("applicationName", string.Empty);

			if (appName.Length > MaxAppNameLength)
			{
				throw new ApplicationException($"Application name is too long. Maximum length allowed is {MaxAppNameLength.ToString("N0")} characters.");
			}

			ApplicationName = appName;
		}
        public ShaolinqErrorLog(IDictionary config)
        {
            var dataAccessModelTypeName = config.Find("dataAccessModelType", string.Empty);

            if (string.IsNullOrEmpty(dataAccessModelTypeName))
            {
                throw new ApplicationException("DataAccessModelType not specified");
            }

            var modelType = Type.GetType(dataAccessModelTypeName);

            if (modelType == null)
            {
                throw new ApplicationException($"Could not find type {dataAccessModelTypeName}");
            }

            if (!modelType.GetInterfaces().Contains(typeof(IElmahDataAccessModel)))
            {
                throw new ApplicationException("DataAccessModelType must implement IElmahDataAccessModel");
            }

            var dataAccessModelConfigSection = config.Find("dataAccessModelConfigSection", modelType.Name);

            var dataAccessModelConfiguration = ConfigurationBlock <DataAccessModelConfiguration> .Load(dataAccessModelConfigSection);

            this.dataModel = (IElmahDataAccessModel)DataAccessModel.BuildDataAccessModel(
                Type.GetType(dataAccessModelTypeName),
                dataAccessModelConfiguration);

            // Set the application name as this implementation provides per-application isolation over a single store.
            // Use application name of "*" to disable per-application isolation.
            var appName = config.Find("applicationName", string.Empty);

            if (appName.Length > MaxAppNameLength)
            {
                throw new ApplicationException($"Application name is too long. Maximum length allowed is {MaxAppNameLength.ToString("N0")} characters.");
            }

            ApplicationName = appName;
        }