private static MemoryStream MessageToXmlString(MessageInfo messageInfo)
 {
     using (var memoryStream = new MemoryStream())
     {
         var xs = new XmlSerializer(typeof (MessageInfo));
         var settings = new XmlWriterSettings() {OmitXmlDeclaration = true, Encoding = Encoding.UTF8};
         using (var xmlTextWriter = XmlWriter.Create(memoryStream, settings))
         {
             xs.Serialize(xmlTextWriter, messageInfo);
             return memoryStream;
         }
     }
 }
        protected void WriteMessage(object message, Exception ex, Level level, bool isCommandText)
        {
            var messageInfo = new MessageInfo()
            {
                Level = level.Name,
                Message = message.ToString(),
                Date = DateTime.Now
            };

            if (ex != null)
            {
                messageInfo.Exception = new MessageInfoException()
                {
                    ErrorMessage = ex.Message,
                    Source = ex.Source,
                    StackTrace = ex.StackTrace
                };
            }

            if (isCommandText && ((this.commandsProcessedCount < this.countOfCommands) || (this.countOfCommands <= 0)))
            {
                double a = (++this.commandsProcessedCount * 100.0) / ((this.countOfCommands == 0) ? ((double)1) : ((double)this.countOfCommands));

                messageInfo.Progress = new MessageInfoProgress()
                {
                    Percentage = Math.Round(a),
                    Processed = commandsProcessedCount,
                    TotalToProcess = countOfCommands
                };

                log.Info($"Progress: ({ messageInfo.Progress.Processed}/{ messageInfo.Progress.TotalToProcess} - { messageInfo.Progress.Percentage}%)");
            }
            else
            {
                if (level == Level.FATAL)
                    log.Fatal(message, ex);
                else if (level == Level.ERROR)
                    log.Error(message, ex);
                else if (level == Level.DEBUG)
                    log.Debug(message);
                else
                    log.Info(message);
            }

            var memoryStream = MessageToXmlString(messageInfo);

            HttpContext.Current.Response.Write(Utf8ByteArrayToString(memoryStream.ToArray()));
            HttpContext.Current.Response.Flush();
        }