/// <summary>
        /// Convert LogLevel enum to NLog.LogLevel.
        /// </summary>
        /// <param name="level">The LogLevel to convert.</param>
        /// <returns>The converted LogLevel.</returns>
        private NLogLevel Convert(LogLevel level)
        {
            switch (level)
            {
            case LogLevel.Trace:
                return(NLogLevel.Trace);

            case LogLevel.Debug:
                return(NLogLevel.Debug);

            case LogLevel.Info:
                return(NLogLevel.Info);

            case LogLevel.Warn:
                return(NLogLevel.Warn);

            case LogLevel.Error:
                return(NLogLevel.Error);

            case LogLevel.Fatal:
                return(NLogLevel.Fatal);

            default:
                return(NLogLevel.Off);
            }
        }
        /// <summary>
        /// Perform the logging message writing.
        /// </summary>
        /// <param name="level">The log level.</param>
        /// <param name="messageOrFormat">Message or format.</param>
        /// <param name="args">Args to use in case messageOrFormat is a format.</param>
        /// <param name="exception">The exception to log if provided.</param>
        private void LogInternal(LogLevel level, string messageOrFormat, object[] args, Exception exception)
        {
            var nlogLevel = Convert(level);

            if (_logger.IsEnabled(nlogLevel) == false)
            {
                return;
            }

            LogInternal(nlogLevel, Properties.ToList(), messageOrFormat, args, exception);
        }
 /// <summary>
 /// Logs an exception and an additional message at the ERROR level.
 /// </summary>
 /// <param name="level">The log level.</param>
 /// <param name="exception">The exception to log.</param>
 /// <param name="format">A composite format string that contains placeholders for the arguments.</param>
 /// <param name="args">An <see cref="object"/>Array containing zero or more objects to format.</param>
 public void Log(LogLevel level, Exception exception, string format, params object[] args)
 {
     LogInternal(level, format, args, exception);
 }
 /// <summary>
 /// Logs an exception and an additional message at the ERROR level.
 /// </summary>
 /// <param name="level">The log level.</param>
 /// <param name="exception">The exception to log.</param>
 /// <param name="message">Additional information regarding the logged exception.</param>
 public void Log(LogLevel level, Exception exception, string message)
 {
     LogInternal(level, message, null, exception);
 }
 /// <summary>
 /// Logs a message at the ERROR level according to the specified <paramref name="format"/> and <paramref name="args"/>.
 /// </summary>
 /// <param name="level">The log level.</param>
 /// <param name="format">A composite format string that contains placeholders for the arguments.</param>
 /// <param name="args">An <see cref="object"/>Array containing zero or more objects to format.</param>
 public void Log(LogLevel level, string format, params object[] args)
 {
     LogInternal(level, format, args, null);
 }
 /// <summary>
 /// Logs a message at the ERROR level.
 /// </summary>
 /// <param name="level">The log level.</param>
 /// <param name="message">The message to log.</param>
 public void Log(LogLevel level, string message)
 {
     LogInternal(level, message, null, null);
 }