public bool ValidateRecordParser(string id, string logName, string configBaseDirectory, string configFile, out IList <String> messages)
        {
            IConfigurationRoot config = ConfigValidator.LoadConfigFile(configBaseDirectory, configFile);

            var configFileValidator = new ConfigValidator(_schemaBaseDirectory);

            bool isValid = configFileValidator.ValidateSchema(configBaseDirectory, configFile, config, out messages);

            if (isValid)
            {
                var sourcesSection = config.GetSection("Sources");
                var sourceSections = sourcesSection.GetChildren();

                foreach (var sourceSection in sourceSections)
                {
                    string curId = config[$"{sourceSection.Path}:{"Id"}"];

                    if (curId.Equals(id))
                    {
                        string sourceType = config[$"{sourceSection.Path}:{"SourceType"}"];

                        if (!sourceType.Equals("DirectorySource"))
                        {
                            messages.Add("This tool only diagnose DirectorySource SourceType.");
                            return(true);
                        }

                        string recordParser   = config[$"{sourceSection.Path}:{"RecordParser"}"];
                        string directory      = config[$"{sourceSection.Path}:{"Directory"}"];
                        string fileNameFilter = config[$"{sourceSection.Path}:{"FileNameFilter"}"];

                        string[] files = Directory.GetFiles(directory, fileNameFilter ?? "*.*");

                        if (files.Length != 1 && logName == null)
                        {
                            messages.Add("You have no files or more than one files in this extension, please note that this tool only can validate one log file at a time: ");
                            foreach (string file in files)
                            {
                                messages.Add(file);
                            }
                            return(false);
                        }

                        if (recordParser.Equals("Timestamp"))
                        {
                            return(ValidateTimeStamp(directory, logName ?? files[0], config, sourceSection, curId, messages));
                        }
                        else if (recordParser.Equals("Regex"))
                        {
                            return(ValidateRegex(directory, logName ?? files[0], config, sourceSection, curId, messages));
                        }
                        else
                        {
                            messages.Add("No needs to validate Timestamp/Regex for the Record Parser: " + recordParser);
                            return(true);
                        }
                    }
                }

                messages.Add("Source ID not found: " + id);
                return(false);
            }

            messages.Add("Invalid configuration file format detected.");
            return(false);
        }