//
 //=============================================================================
 /// <summary>
 /// Log all levels if configured, else log errors and above
 /// </summary>
 /// <param name="core"></param>
 /// <param name="message"></param>
 /// <param name="level"></param>
 public static void log(CoreController core, string message, BaseClasses.CPLogBaseClass.LogLevel level)
 {
     try {
         string messageLine    = getMessageLine(core, message);
         Logger loggerInstance = core.nlogLogger;
         loggerInstance.Log(typeof(LogController), new LogEventInfo(getNLogLogLevel(level), loggerInstance.Name, messageLine));
         //
         // -- add to doc exception list to display at top of webpage
         if (level < BaseClasses.CPLogBaseClass.LogLevel.Warn)
         {
             return;
         }
         if (core.doc.errorList == null)
         {
             core.doc.errorList = new List <string>();
         }
         if (core.doc.errorList.Count < 10)
         {
             core.doc.errorList.Add(messageLine);
             return;
         }
         if (core.doc.errorList.Count == 10)
         {
             core.doc.errorList.Add("Exception limit exceeded");
         }
     } catch (Exception) {
         // -- throw away errors in error-handling
     }
 }
        //
        //=============================================================================
        /// <summary>
        /// Convert internal logLevels to NLog, decoupling log levels so we don't expose NLog classes
        /// </summary>
        /// <param name="level"></param>
        /// <returns></returns>
        public static NLog.LogLevel getNLogLogLevel(BaseClasses.CPLogBaseClass.LogLevel level)
        {
            //
            // -- decouple NLog types from internal enum
            switch (level)
            {
            case BaseClasses.CPLogBaseClass.LogLevel.Trace:
                return(NLog.LogLevel.Trace);

            case BaseClasses.CPLogBaseClass.LogLevel.Debug:
                return(NLog.LogLevel.Debug);

            case BaseClasses.CPLogBaseClass.LogLevel.Warn:
                return(NLog.LogLevel.Warn);

            case BaseClasses.CPLogBaseClass.LogLevel.Error:
                return(NLog.LogLevel.Error);

            case BaseClasses.CPLogBaseClass.LogLevel.Fatal:
                return(NLog.LogLevel.Fatal);

            default:
                return(NLog.LogLevel.Info);
            }
        }
 //
 //=============================================================================
 /// <summary>
 /// log any level with NLOG without messageLine formatting. Only use in extreme cases where the application environment is not stable.
 /// </summary>
 /// <param name="core"></param>
 /// <param name="messageLine"></param>
 /// <param name="level"></param>
 public static void logLocalOnly(string messageLine, BaseClasses.CPLogBaseClass.LogLevel level)
 {
     try {
         var nlogLogger = LogManager.GetCurrentClassLogger();
         nlogLogger.Log(typeof(LogController), new LogEventInfo(getNLogLogLevel(level), nlogLogger.Name, messageLine));
     } catch (Exception) {
         // -- throw away errors in error-handling
     }
 }