public static void LogAndSendMessage(this Logger logger, StagingDTO staging, string action,
                                             Guid?projectUid, Guid winServiceIterationUid, string message,
                                             bool isWarn, Exception exception, string actionSource = null, string actionStartEndMarker = null)
        {
            LogMessage logMessage = GenerateMessage(staging, action, projectUid, winServiceIterationUid,
                                                    message, isWarn, exception, actionSource, actionStartEndMarker);

            if (logMessage.WinServiceIterationUid != Guid.Empty &&
                !string.IsNullOrEmpty(logMessage.ActionSource))
            {
                AddToCollection(logMessage);
            }
            if (logMessage.WinServiceIterationUid != Guid.Empty &&
                !string.IsNullOrEmpty(logMessage.ActionSource) &&
                logMessage.ActionStartEndMarker == CommonConstants.End)
            {
                try
                {
                    ProjectOnlineSystemConnectorHubHelper.SendLogMessage(logMessage);
                }
                catch (InvalidOperationException invalidOperationException)
                {
                }
                catch (Exception exc)
                {
                    logger.Error(exc);
                }
            }

            if (!String.IsNullOrEmpty(message))
            {
                if (isWarn)
                {
                    logger.Warn(message);
                }
                else
                {
                    if (exception != null)
                    {
                        logger.Error(message);
                    }
                    else
                    {
                        logger.Info(message);
                    }
                }
            }
            if (exception != null)
            {
                logger.Error(exception);
            }
        }
        private static LogMessage GenerateMessage(StagingDTO staging, string action, Guid?projectUid,
                                                  Guid winServiceIterationGuid, string message, bool isWarn, Exception exception, string actionSource,
                                                  string actionStartEndMarker)
        {
            var logMessage = new LogMessage
            {
                WinServiceIterationUid = winServiceIterationGuid,
                Message              = message,
                IsWarn               = isWarn,
                ActionIndex          = actionIndex,
                Action               = action,
                ActionSource         = actionSource,
                ActionStartEndMarker = actionStartEndMarker,
                TimeStampStart       = DateTime.Now
            };

            if (staging != null)
            {
                logMessage.StagingRecordDateCreated = staging.RecordDateCreated;
                logMessage.StagingIssueKey          = staging.IssueKey;
                logMessage.StagingSystemId          = staging.SystemId;
            }
            if (exception != null)
            {
                logMessage.ActionResult     = CommonConstants.Ko;
                logMessage.ExceptionMessage = exception.Message;
            }
            else
            {
                logMessage.ActionResult = CommonConstants.Ok;
            }
            if (projectUid.HasValue)
            {
                logMessage.IsBroadcastMessage = false;
                logMessage.ProjectUid         = projectUid.Value;
            }
            else
            {
                logMessage.IsBroadcastMessage = true;
            }
            actionIndex++;
            return(logMessage);
        }