public void TestLogTools(string logDirectory, string logFileNameBase, BaseLogger.LogLevels entryType, BaseLogger.LogLevels logThresholdLevel)
        {
            var logFilePath = Path.Combine(logDirectory, logFileNameBase);

            LogTools.CreateFileLogger(logFilePath, logThresholdLevel);
            Console.WriteLine("Log file; " + LogTools.CurrentLogFilePath);

            var message = "Test log " + entryType + " via LogTools (log threshold is " + logThresholdLevel + ")";

            switch (entryType)
            {
            case BaseLogger.LogLevels.DEBUG:
                LogTools.LogDebug(message);
                break;

            case BaseLogger.LogLevels.INFO:
                LogTools.LogMessage(message);
                break;

            case BaseLogger.LogLevels.WARN:
                LogTools.LogWarning(message);
                break;

            case BaseLogger.LogLevels.ERROR:
                LogTools.LogError(message);
                break;

            case BaseLogger.LogLevels.FATAL:
                LogTools.LogFatalError(message);
                break;

            default:
                LogTools.LogError("Unrecognized log type: " + entryType);
                break;
            }

            ProgRunner.SleepMilliseconds(100);

            LogTools.FlushPendingMessages();
        }
        /// <summary>
        /// Main entry method
        /// </summary>
        public static int Main()
        {
            var commandLineParser = new clsParseCommandLine();

            mLogLevel = BaseLogger.LogLevels.INFO;

            mMTSServer               = string.Empty;
            mLogDBConnectionString   = clsMyEMSLMTSFileCacher.LOG_DB_CONNECTION_STRING;
            mMinimumCacheFreeSpaceGB = clsMyEMSLMTSFileCacher.DEFAULT_MINIMUM_CACHE_FREE_SPACE_GB;
            mLocalServerMode         = false;
            mPreviewMode             = false;
            mTraceMode               = false;

            try
            {
                var success = false;

                if (commandLineParser.ParseCommandLine())
                {
                    if (SetOptionsUsingCommandLineParameters(commandLineParser))
                    {
                        success = true;
                    }
                }

                if (!success ||
                    commandLineParser.NeedToShowHelp ||
                    commandLineParser.ParameterCount + commandLineParser.NonSwitchParameterCount == 0 ||
                    mMTSServer.Length == 0 && !mLocalServerMode)
                {
                    ShowProgramHelp();
                    return(-1);
                }

                if (mLocalServerMode)
                {
                    mMTSServer = string.Empty;
                }
                else
                {
                    var updatesArePending = WindowsUpdateStatus.UpdatesArePending(out var pendingWindowsUpdateMessage);

                    if (updatesArePending)
                    {
                        Console.WriteLine(pendingWindowsUpdateMessage);
                        Console.WriteLine("Will not contact the MTS server to process cache requests");
                        return(0);
                    }
                }

                var downloader = new clsMyEMSLMTSFileCacher(mMTSServer, mLogLevel, mLogDBConnectionString)
                {
                    MinimumCacheFreeSpaceGB = mMinimumCacheFreeSpaceGB,
                    TraceMode = mTraceMode
                };

                // Attach the events
                downloader.DebugEvent     += Downloader_DebugEvent;
                downloader.ErrorEvent     += Downloader_ErrorEvent;
                downloader.StatusEvent    += Downloader_StatusEvent;
                downloader.WarningEvent   += Downloader_WarningEvent;
                downloader.ProgressUpdate += Downloader_ProgressUpdate;

                mPercentComplete        = 0;
                mLastProgressUpdateTime = DateTime.UtcNow;

                // Initiate processing, which will contact the MTS Server to see if any files need to be cached
                success = downloader.Start(mPreviewMode);

                LogTools.FlushPendingMessages();

                if (!success)
                {
                    ShowErrorMessage("Error processing cache requests for MTS server " + mMTSServer + ": " + downloader.ErrorMessage);
                    return(-3);
                }
            }
            catch (Exception ex)
            {
                LogTools.FlushPendingMessages();
                Console.WriteLine("Error occurred in Program->Main: " + Environment.NewLine + ex.Message);
                Console.WriteLine(ex.StackTrace);
                Thread.Sleep(1500);
                return(-1);
            }

            return(0);
        }