protected override void Write(LogEventInfo logEvent)
        {
            _raygunClient = _raygunClient ?? (_raygunClient = CreateRaygunClient());

            Exception exception = ExtractException(logEvent);
            var       tags      = ExtractTags(logEvent, exception);
            Dictionary <string, object> userCustomData = ExtractProperties(logEvent);
            string layoutLogMessage = Layout.Render(logEvent);

            userCustomData["RenderedLogMessage"] = layoutLogMessage;
            userCustomData["LogMessageTemplate"] = logEvent.Message;

            if (exception == null)
            {
                exception = new RaygunException(layoutLogMessage);
            }

            string userIdentityInfo = UserIdentityInfo != null?UserIdentityInfo.Render(logEvent) : string.Empty;

            var userIdentity = string.IsNullOrEmpty(userIdentityInfo) ? null : new RaygunIdentifierMessage(userIdentityInfo);

            _raygunClient.UserInfo = userIdentity;

            _raygunClient.SendInBackground(exception, tags, userCustomData);
        }