private void LogIncomingMessage(string payload)
        {
            try
            {
                var log = new ApiLog
                {
                    ApplicationName = "signalr-hub",
                    Verb            = "signalr-inbound-message",
                    Request         = new Payload(payload)
                };
                log.SetValue("title", "received-user-event");

                Logger.WriteLogAsync(log);
            }
            catch (Exception exception)
            {
                exception.Data.Add("message", "subscribres invocation failed");
                Platform.Common.ExceptionPolicy.HandleException(exception, Policies.DefaultPolicy);
            }
        }
        private void LogIncomingMessage(string payload)
        {
            try
            {
                var log = new ApiLog
                {
                    ApplicationName = "signalr-hub",
                    Verb            = "signalr-inbound-message",
                    Request         = new Payload(payload)
                };
                log.SetValue("title", "received-user-event");

                var task = Task.Run(async() => {
                    await Logger.WriteLogAsync(log);
                });

                task.Wait(); //
            }
            catch (Exception exception)
            {
                Platform.Common.ExceptionPolicy.HandleException(exception, Policies.DefaultPolicy);
            }
        }
        private ApiLog GetApiLog()
        {
            var log   = new ApiLog();
            var dt    = DateTime.UtcNow;
            var bytes = new UTF8Encoding(false).GetBytes("payload");

            log.ApplicationName             = App;
            log.AppDomain                   = AppDomain.CurrentDomain.FriendlyName;
            log.CorrelationId               = CorrelationId;
            log.StackId                     = StackId;
            log.Message                     = Message;
            log.TenantId                    = TenantId;
            log.Request                     = new Payload("test request");
            log.Response                    = new Payload("test response");
            log.IsSuccessful                = true;
            log.Verb                        = "POST";
            log.Url                         = "testurl";
            log.Api                         = "compositeSink";
            log.TimeTakenInMs               = 10.0d;
            log.RequestHeaders["rqheader"]  = "RqheaderValue";
            log.ResponseHeaders["rsheader"] = "RsheaderValue";
            log.SetValue("int_field", 1);
            log.SetValue("string_field", "str");
            log.SetValue("dt_field", dt);
            log.SetValue("long_field", 1L);
            log.SetValue("float_field", 1.0f);
            log.SetValue("double_field", 2.0d);
            log.SetValue("decimal_field", 3.0m);
            log.SetValue("bool_field", true);
            log.SetValue("map_field", new Dictionary <string, string>()
            {
                { "jsonMapField1", "jsonMapValue1" }
            });
            log.SetValue("payload_field", bytes);
            log.SetValue("geo_field", new GeoPoint(10, 10));
            log.SetValue("ip_field", IPAddress.Loopback);

            return(log);
        }
        protected virtual ILog CreateApiLog(HttpRequest request, HttpResponse response, bool isSuccessful, TimeSpan timeTaken)
        {
            var requestLogData = request.LogData.ToList();

            var apiLog = new ApiLog()
            {
                ApplicationName          = CallContext.Current?.ApplicationName,
                CorrelationId            = CallContext.Current?.CorrelationId,
                TenantId                 = CallContext.Current?.TenantId,
                StackId                  = CallContext.Current?.StackId,
                ApplicationTransactionId = CallContext.Current?.TransactionId,
                ClientIp                 = CallContext.Current?.IpAddress,
                TimeTakenInMs            = timeTaken.TotalMilliseconds,
                Url          = request.Uri.AbsoluteUri,
                IsSuccessful = isSuccessful
            };
            string transactionId;

            if (response != null && response.Headers.TryGetValue(HeaderNames.TransactionId, out transactionId))
            {
                apiLog.TransactionId = transactionId;
            }

            if (response != null)
            {
                apiLog.SetValue("http_status_code", (int)response.Status);
            }

            apiLog.SetValue("request_method", request.Method);

            if (request?.Payload != null)
            {
                apiLog.Request = new Payload(request.Payload);
            }

            if (response?.Payload != null)
            {
                apiLog.Response = new Payload(response.Payload);
            }

            if (request.Headers?.Keys != null)
            {
                foreach (var key in request.Headers?.Keys)
                {
                    apiLog.RequestHeaders[key] = request.Headers[key];
                }
            }

            if (response?.Headers?.Keys != null)
            {
                foreach (var key in response.Headers?.Keys)
                {
                    apiLog.ResponseHeaders[key] = response.Headers[key];
                }
            }

            if (Filters != null)
            {
                apiLog.Filters.AddRange(Filters);
            }

            // Always log the white listed headers as they are required for reporting purpose
            var whiteListedHeaders = CallContext.Current?.Headers;

            if (whiteListedHeaders != null)
            {
                foreach (var key in whiteListedHeaders.AllKeys.ToList())
                {
                    apiLog.RequestHeaders[key] = whiteListedHeaders[key];
                }
            }

            SetLogDataToLog(request?.LogData, apiLog);
            SetLogDataToLog(response?.LogData, apiLog);
            return(apiLog);
        }
        public async Task Log(object sender, LogEventArgs logEventArgs)
        {
            var context = CallContext.Current;
            var log     = new ApiLog
            {
                ApplicationName          = context.ApplicationName,
                Api                      = Api,
                Verb                     = Verb,
                TenantId                 = context.TenantId,
                CorrelationId            = context.CorrelationId,
                StackId                  = context.StackId,
                ApplicationTransactionId = context.TransactionId,
                TransactionId            = logEventArgs.ResponseHeaders != null ? logEventArgs.ResponseHeaders[HeaderNames.TransactionId] : null,
                ClientIp                 = context.IpAddress,
                Message                  = Message,
                TimeTakenInMs            = logEventArgs.TimeTakenInSeconds * 1000,
                LogTime                  = logEventArgs.Timestamp,
                Url                      = logEventArgs.Url,
                IsSuccessful             = (int)logEventArgs.HttpStatusCode / 100 == 2
            };

            log.SetValue("session_id", SessionId);
            log.SetValue("http_method", HttpMethod);
            log.SetValue("http_status_code", (int)logEventArgs.HttpStatusCode);

            if (string.IsNullOrEmpty(logEventArgs.RequestString) == false)
            {
                log.Request = new Payload(logEventArgs.RequestString);
            }
            else if (logEventArgs.Request != null)
            {
                log.Request = new Payload(ByteHelper.ToByteArrayUsingJsonSerialization(logEventArgs.Request));
            }

            if (string.IsNullOrEmpty(logEventArgs.ResponseString) == false)
            {
                log.Response = new Payload(logEventArgs.ResponseString);
            }
            else if (logEventArgs.Response != null)
            {
                log.Response = new Payload(ByteHelper.ToByteArrayUsingJsonSerialization(logEventArgs.Response));
            }

            if (logEventArgs.RequestHeaders?.AllKeys != null)
            {
                foreach (var key in logEventArgs.RequestHeaders?.AllKeys)
                {
                    log.RequestHeaders[key] = logEventArgs.RequestHeaders[key];
                }
            }

            if (logEventArgs.ContentHeaders?.AllKeys != null)
            {
                foreach (var key in logEventArgs.ContentHeaders?.AllKeys)
                {
                    log.ResponseHeaders[key] = logEventArgs.ContentHeaders[key];
                }
            }

            if (logEventArgs.ResponseHeaders?.AllKeys != null)
            {
                foreach (var key in logEventArgs.ResponseHeaders?.AllKeys)
                {
                    log.ResponseHeaders[key] = logEventArgs.ResponseHeaders[key];
                }
            }

            log.Filters.AddRange(LogFilters);

            await Platform.Common.Logging.Logger.WriteLogAsync(log);

            HandleApiMetering(logEventArgs);
        }