/// <summary> /// Returns an instance of a trace provider registered under the specified GUID value. /// </summary> /// <param name="providerGuid">The value uniquely identifying the trace provider.</param> /// <returns>An instance of the trace provider implementing the <see cref="ITraceEventProvider"/> interface, of a null reference if no providers were found with matching GUID value.</returns> public static ITraceEventProvider Create(Guid providerGuid) { ITraceEventProvider traceProvider = null; traceProviderCache.TryGetValue(providerGuid, out traceProvider); return(traceProvider); }
/// <summary> /// Executes the custom runtime task component to process the input message and returns the result message. /// </summary> /// <param name="pContext">A reference to <see cref="Microsoft.BizTalk.Component.Interop.IPipelineContext"/> object that contains the current pipeline context.</param> /// <param name="pInMsg">A reference to <see cref="Microsoft.BizTalk.Message.Interop.IBaseMessage"/> object that contains the message to process.</param> /// <returns>A reference to the returned <see cref="Microsoft.BizTalk.Message.Interop.IBaseMessage"/> object which will contain the output message.</returns> public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg) { Guard.ArgumentNotNull(pContext, "pContext"); Guard.ArgumentNotNull(pInMsg, "pInMsg"); var callToken = TraceManager.PipelineComponent.TraceIn(); if (pInMsg.BodyPart != null) { Stream messageDataStream = BizTalkUtility.EnsureSeekableStream(pInMsg, pContext); if (messageDataStream != null) { try { XmlReaderSettings readerSettings = new XmlReaderSettings() { CloseInput = false, CheckCharacters = false, IgnoreComments = true, IgnoreProcessingInstructions = true, IgnoreWhitespace = true, ValidationType = ValidationType.None }; using (XmlReader messageDataReader = XmlReader.Create(messageDataStream, readerSettings)) { XElement eventDataXml = XElement.Load(messageDataReader); TraceEventRecord eventRecord; ITraceEventProvider traceProvider = null; var traceEventRecords = eventDataXml.Descendants(XName.Get(WellKnownContractMember.MessageParameters.TraceEvents, eventDataXml.Name.Namespace.NamespaceName)).Descendants(XName.Get(traceEventRecordAttr.Name, traceEventRecordAttr.Namespace)); foreach (var r in traceEventRecords) { eventRecord = TraceEventRecord.Create(XmlReader.Create(r.CreateReader(), readerSettings)); traceProvider = TraceManager.Create(eventRecord.EventSourceId); if (traceProvider != null) { traceProvider.TraceEvent(eventRecord); } else { object[] parameters = new object[] { eventRecord.Message, eventRecord.EventId, eventRecord.EventSource, eventRecord.MachineName, eventRecord.ProcessName, eventRecord.ProcessId, eventRecord.ThreadId, eventRecord.DateTime.ToString("o") }; TraceManager.PipelineComponent.TraceWarning(TraceLogMessages.NoTraceProviderFound, eventRecord.EventSource, String.Format(CultureInfo.InvariantCulture, Resources.TraceEventMessageFormatString, parameters)); } } } } finally { if (messageDataStream.CanSeek) { messageDataStream.Seek(0, SeekOrigin.Begin); } } } } TraceManager.PipelineComponent.TraceOut(callToken); return(pInMsg); }
static TraceManager() { customComponentTracer = Create("CustomComponent", InstrumentationUtility.TracingProviderGuid.Default); pipelineComponentTracer = Create("PipelineComponent", InstrumentationUtility.TracingProviderGuid.PipelineComponent); workflowComponentTracer = Create("WorkflowComponent", InstrumentationUtility.TracingProviderGuid.WorkflowComponent); dataAccessComponentTracer = Create("DataAccessComponent", InstrumentationUtility.TracingProviderGuid.DataAccessComponent); transformComponentTracer = Create("TransformComponent", InstrumentationUtility.TracingProviderGuid.TransformComponent); serviceComponentTracer = Create("ServiceComponent", InstrumentationUtility.TracingProviderGuid.ServiceComponent); rulesComponentTracer = Create("RulesComponent", InstrumentationUtility.TracingProviderGuid.RulesComponent); trackingComponentTracer = Create("TrackingComponent", InstrumentationUtility.TracingProviderGuid.TrackingComponent); workerRoleComponentTracer = Create("WorkerRoleComponent", InstrumentationUtility.TracingProviderGuid.WorkerRoleComponent); cloudStorageComponent = Create("CloudStorageComponent", InstrumentationUtility.TracingProviderGuid.CloudStorageComponent); debugComponentTracer = new DebugTraceEventProvider(); }
/// <summary> /// Returns an instance of a trace provider registered under the specified name. /// </summary> /// <param name="providerName">The name of the trace provider.</param> /// <returns>An instance of the trace provider implementing the <see cref="ITraceEventProvider"/> interface, of a null reference if no providers were found with matching name.</returns> public static ITraceEventProvider Create(string providerName) { Guard.ArgumentNotNullOrEmptyString(providerName, "providerName"); ITraceEventProvider traceProvider = null; Guid providerGuid = default(Guid); if (traceProviderGuidToSourceMap.TryGetValue(providerName, out providerGuid)) { traceProviderCache.TryGetValue(providerGuid, out traceProvider); } return(traceProvider); }
static TraceManager() { customComponentTracer = new DebugTraceEventProvider(); pipelineComponentTracer = new DebugTraceEventProvider(); workflowComponentTracer = new DebugTraceEventProvider(); dataAccessComponentTracer = new DebugTraceEventProvider(); transformComponentTracer = new DebugTraceEventProvider(); serviceComponentTracer = new DebugTraceEventProvider(); rulesComponentTracer = new DebugTraceEventProvider(); trackingComponentTracer = new DebugTraceEventProvider(); workerRoleComponentTracer = new DebugTraceEventProvider(); cloudStorageComponent = new DebugTraceEventProvider(); debugComponentTracer = new DebugTraceEventProvider(); webRoleComponentTracer = new DebugTraceEventProvider(); }
/// <summary> /// Returns an instance of a trace provider initialized with the specified name and provider GUID. /// </summary> /// <param name="providerName">The name of the trace provider.</param> /// <param name="providerGuid">The value uniquely identifying the trace provider.</param> /// <returns>An instance of the trace provider implementing the <see cref="ITraceEventProvider"/> interface.</returns> public static ITraceEventProvider Create(string providerName, Guid providerGuid) { Guard.ArgumentNotNullOrEmptyString(providerName, "providerName"); ITraceEventProvider traceProvider = null; if (!traceProviderCache.TryGetValue(providerGuid, out traceProvider)) { lock (traceProviderCacheLock) { if (!traceProviderCache.TryGetValue(providerGuid, out traceProvider)) { traceProvider = new ComponentTraceEventProvider(providerName, providerGuid); traceProviderCache.Add(providerGuid, traceProvider); traceProviderGuidToSourceMap.Add(providerName, providerGuid); } } } return(traceProvider); }
/// <summary> /// Writes detailed information about the specified database command including command statement, its parameters and their values. /// </summary> /// <param name="traceProvider">The type which is targeted by this extension method.</param> /// <param name="command">The database command which will be traced.</param> public static void TraceCommand(this ITraceEventProvider traceProvider, IDbCommand command) { if (command != null) { traceProvider.TraceDetails(() => { StringBuilder traceTextBuilder = new StringBuilder(); traceTextBuilder.AppendFormat("EXEC {0}", command.CommandText); if (command.Parameters != null) { foreach (var parameter in command.Parameters) { IDbDataParameter dataParam = parameter as IDbDataParameter; bool firstPass = true; if (dataParam != null) { if (!firstPass) { traceTextBuilder.Append(", "); } else { traceTextBuilder.Append(" "); } traceTextBuilder.AppendFormat("{0}='{1}'{2}", dataParam.ParameterName, dataParam.Value != null ? dataParam.Value : "NULL", dataParam.Direction == ParameterDirection.Input ? String.Empty : " OUT"); firstPass = false; } } } return(traceTextBuilder.ToString()); }); } }