/// <summary>
        /// Converts Serilog traces/exceptions to application insights traces/exceptions. 
        /// </summary>
        private static ITelemetry ConvertLogEventsToCustomTraceTelemetry(
            LogEvent logEvent,
            IFormatProvider formatProvider,
            Func<LogEvent, bool> includeLogEvent)
        {
            if (logEvent.Exception == null && includeLogEvent != null && !includeLogEvent(logEvent))
            {
                return null;
            }

            // first create a default TraceTelemetry using the sink's default logic
            // .. but without the log level, and (rendered) message (template) included in the Properties
            ITelemetry telemetry = logEvent.Exception == null
                ? (ITelemetry)logEvent.ToDefaultTraceTelemetry(
                    formatProvider,
                    includeLogLevelAsProperty: false,
                    includeRenderedMessageAsProperty: false,
                    includeMessageTemplateAsProperty: false)
                : (ITelemetry)logEvent.ToDefaultExceptionTelemetry(
                    formatProvider,
                    includeLogLevelAsProperty: false,
                    includeRenderedMessageAsProperty: false,
                    includeMessageTemplateAsProperty: false);

            // and remove RequestId from the telemetry properties
            if (logEvent.Properties.ContainsKey("RequestId"))
            {
                ((ISupportProperties)telemetry).Properties.Remove("RequestId");
            }
            if (logEvent.Properties.ContainsKey("OperationId"))
            {
                var operationId = logEvent.Properties["OperationId"].ToString();
                ((ISupportProperties)telemetry).Properties.Remove("OperationId");
                telemetry.Context.Operation.Id = operationId;
            }

            return telemetry;
        }