Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Diagnostics / Eventing / EventProviderTraceListener.cs / 1305376 / EventProviderTraceListener.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Globalization; using System.Diagnostics.CodeAnalysis; namespace System.Diagnostics.Eventing{ [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public class EventProviderTraceListener : TraceListener { // // The listener uses the EtwProvider base class. // Because Listener data is not schematized at the moment the listener will // log events using WriteMessageEvent method. // // Because WriteMessageEvent takes a string as the event payload // all the overriden loging methods convert the arguments into strings. // Event payload is "delimiter" separated, which can be configured // // private EventProvider m_provider; private const string s_nullStringValue = "null"; private const string s_nullStringComaValue = "null,"; private const string s_nullCStringValue = ": null"; private const string s_activityIdString = "activityId="; private const string s_relatedActivityIdString = "relatedActivityId="; private const string s_callStackString = " : CallStack:"; private const string s_optionDelimiter = "delimiter"; private string m_delimiter = ";"; private int m_initializedDelim = 0; private const uint s_keyWordMask = 0xFFFFFF00; private const int s_defaultPayloadSize = 512; private object m_Lock = new object(); [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] public string Delimiter { get { if (m_initializedDelim == 0) { lock (m_Lock) { if (m_initializedDelim == 0) { if (Attributes.ContainsKey(s_optionDelimiter)) { m_delimiter = Attributes[s_optionDelimiter]; } m_initializedDelim = 1; } } if (m_delimiter == null) throw new ArgumentNullException("Delimiter"); if (m_delimiter.Length == 0) throw new ArgumentException(SR.GetString(SR.Argument_NeedNonemptyDelimiter)); } return m_delimiter; } [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] set { if (value == null) throw new ArgumentNullException("Delimiter"); if (value.Length == 0) throw new ArgumentException(SR.GetString(SR.Argument_NeedNonemptyDelimiter)); lock (m_Lock) { m_delimiter = value; m_initializedDelim = 1; } } } protected override string[] GetSupportedAttributes() { return new String[] { s_optionDelimiter }; } ////// This method creates an instance of the ETW provider. /// The guid argument must be a valid GUID or a format exeption will be /// thrown when creating an instance of the ControlGuid. /// We need to be running on Vista or above. If not an /// PlatformNotSupported exception will be thrown by the EventProvider. /// public EventProviderTraceListener(string providerId) { InitProvider(providerId); } public EventProviderTraceListener(string providerId, string name) : base(name) { InitProvider(providerId); } public EventProviderTraceListener(string providerId, string name, string delimiter) : base(name) { if (delimiter == null) throw new ArgumentNullException("delimiter"); if (delimiter.Length == 0) throw new ArgumentException(SR.GetString(SR.Argument_NeedNonemptyDelimiter)); m_delimiter = delimiter; m_initializedDelim = 1; InitProvider(providerId); } private void InitProvider(string providerId) { Guid controlGuid = new Guid(providerId); // // Create The ETW TraceProvider // m_provider = new EventProvider(controlGuid); } // // override Listener methods // public sealed override void Flush() { } public sealed override bool IsThreadSafe { get { return true; } } public override void Close() { m_provider.Close(); } public sealed override void Write(string message) { if (!m_provider.IsEnabled()) { return; } m_provider.WriteMessageEvent(message, (byte)TraceEventType.Information, 0); } public sealed override void WriteLine(string message) { Write(message); } // // For all the methods below the string to be logged contains: // m_delimeter seperated data converted to string // followed by the callstack if any. // "id : Data1, Data2... : callstack : callstack value" // // The source parameter is ignored. // public sealed override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) { if (!m_provider.IsEnabled()) { return; } if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null,null,null,null)) { return; } StringBuilder dataString = new StringBuilder(s_defaultPayloadSize); if (data != null) { dataString.Append(data.ToString()); } else { dataString.Append(s_nullCStringValue); } if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { dataString.Append(s_callStackString); dataString.Append(eventCache.Callstack); m_provider.WriteMessageEvent( dataString.ToString(), (byte)eventType, (long)eventType & s_keyWordMask); } else { m_provider.WriteMessageEvent(dataString.ToString(), (byte)eventType, (long)eventType & s_keyWordMask); } } public sealed override void TraceData(TraceEventCache eventCache, String source, TraceEventType eventType, int id, params object[] data) { if (!m_provider.IsEnabled()) { return; } if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null, null, null, null)) { return; } int index; StringBuilder dataString = new StringBuilder(s_defaultPayloadSize); if ((data != null) && (data.Length > 0) ) { for (index = 0; index < (data.Length - 1); index++) { if (data[index] != null) { dataString.Append(data[index].ToString()); dataString.Append(Delimiter); } else { dataString.Append(s_nullStringComaValue); } } if (data[index] != null) { dataString.Append(data[index].ToString()); } else { dataString.Append(s_nullStringValue); } } else { dataString.Append(s_nullStringValue); } if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { dataString.Append(s_callStackString); dataString.Append(eventCache.Callstack); m_provider.WriteMessageEvent( dataString.ToString(), (byte)eventType, (long)eventType & s_keyWordMask); } else { m_provider.WriteMessageEvent(dataString.ToString(), (byte)eventType, (long)eventType & s_keyWordMask); } } public sealed override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id) { if (!m_provider.IsEnabled()) { return; } if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null, null, null, null)) { return; } if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { m_provider.WriteMessageEvent(s_callStackString + eventCache.Callstack, (byte)eventType, (long)eventType & s_keyWordMask); } else { m_provider.WriteMessageEvent(String.Empty, (byte)eventType, (long)eventType & s_keyWordMask); } } public sealed override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) { if (!m_provider.IsEnabled()) { return; } if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null, null, null, null)) { return; } StringBuilder dataString = new StringBuilder(s_defaultPayloadSize); dataString.Append(message); if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { dataString.Append(s_callStackString); dataString.Append(eventCache.Callstack); m_provider.WriteMessageEvent( dataString.ToString(), (byte)eventType, (long)eventType & s_keyWordMask); } else { m_provider.WriteMessageEvent(dataString.ToString(), (byte)eventType, (long)eventType & s_keyWordMask); } } public sealed override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) { if (!m_provider.IsEnabled()) { return; } if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null, null, null, null)) { return; } if (args == null) { if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { m_provider.WriteMessageEvent(format + s_callStackString + eventCache.Callstack, (byte)eventType, (long)eventType & s_keyWordMask); } else { m_provider.WriteMessageEvent(format, (byte)eventType, (long)eventType & s_keyWordMask); } } else { if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { m_provider.WriteMessageEvent(String.Format(CultureInfo.InvariantCulture, format, args) + s_callStackString + eventCache.Callstack, (byte)eventType, (long)eventType & s_keyWordMask); } else { m_provider.WriteMessageEvent(String.Format(CultureInfo.InvariantCulture, format, args), (byte)eventType, (long)eventType&s_keyWordMask); } } } public override void Fail(string message, string detailMessage) { StringBuilder failMessage = new StringBuilder(message); if (detailMessage != null) { failMessage.Append(" "); failMessage.Append(detailMessage); } this.TraceEvent(null, null, TraceEventType.Error, 0, failMessage.ToString()); } //// [System.Security.SecurityCritical] public sealed override void TraceTransfer(TraceEventCache eventCache, String source, int id, string message, Guid relatedActivityId) { if (!m_provider.IsEnabled()) { return; } StringBuilder dataString = new StringBuilder(s_defaultPayloadSize); object correlationId = Trace.CorrelationManager.ActivityId; if (correlationId != null) { Guid activityId = (Guid)correlationId; dataString.Append(s_activityIdString); dataString.Append(activityId.ToString()); dataString.Append(Delimiter); } dataString.Append(s_relatedActivityIdString); dataString.Append(relatedActivityId.ToString()); dataString.Append(Delimiter + message); if ((eventCache != null) && (TraceOutputOptions & TraceOptions.Callstack) != 0) { dataString.Append(s_callStackString); dataString.Append(eventCache.Callstack); m_provider.WriteMessageEvent( dataString.ToString(), 0, (long)TraceEventType.Transfer); } else { m_provider.WriteMessageEvent(dataString.ToString(), 0, (long)TraceEventType.Transfer); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.//
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- newinstructionaction.cs
- RoutedEventArgs.cs
- WithParamAction.cs
- LinkButton.cs
- TextLine.cs
- PrintController.cs
- RoutedPropertyChangedEventArgs.cs
- VoiceObjectToken.cs
- XmlSerializableWriter.cs
- ContentType.cs
- CodeGroup.cs
- WebServiceData.cs
- CodeSubDirectoriesCollection.cs
- MetaModel.cs
- OleDbInfoMessageEvent.cs
- NegotiationTokenAuthenticator.cs
- NestedContainer.cs
- MailMessage.cs
- ComponentEvent.cs
- XmlStreamStore.cs
- HtmlInputRadioButton.cs
- Int32Converter.cs
- RadioButton.cs
- TextTreeInsertElementUndoUnit.cs
- XmlWriterSettings.cs
- CreateUserWizard.cs
- MultipleCopiesCollection.cs
- DefaultParameterValueAttribute.cs
- EventDescriptor.cs
- TextBoxBase.cs
- BindingsCollection.cs
- EdmType.cs
- FrameworkContentElement.cs
- GeneralTransform3D.cs
- DataGridViewBindingCompleteEventArgs.cs
- DynamicMethod.cs
- localization.cs
- DbConnectionFactory.cs
- GAC.cs
- ObjectViewEntityCollectionData.cs
- HostedTransportConfigurationManager.cs
- ControlPaint.cs
- DataGridViewCellParsingEventArgs.cs
- JoinGraph.cs
- GcHandle.cs
- ConnectionManagementElement.cs
- RouteItem.cs
- AccessViolationException.cs
- TabControl.cs
- EventListenerClientSide.cs
- RoleManagerModule.cs
- HttpCapabilitiesBase.cs
- MultiSelectRootGridEntry.cs
- LogExtent.cs
- HostingPreferredMapPath.cs
- GC.cs
- DebugController.cs
- dataSvcMapFileLoader.cs
- EraserBehavior.cs
- DataMisalignedException.cs
- MetadataProperty.cs
- LinkLabel.cs
- Paragraph.cs
- WeakEventTable.cs
- AnonymousIdentificationModule.cs
- FlowDocumentPaginator.cs
- EventWaitHandle.cs
- ElapsedEventArgs.cs
- Variable.cs
- MetabaseServerConfig.cs
- Int32EqualityComparer.cs
- ApplicationHost.cs
- XmlValidatingReader.cs
- XmlCharCheckingReader.cs
- SapiRecognizer.cs
- DateTimeValueSerializerContext.cs
- MembershipSection.cs
- BasicViewGenerator.cs
- PingReply.cs
- SafeRightsManagementHandle.cs
- Track.cs
- DbProviderFactoriesConfigurationHandler.cs
- HealthMonitoringSection.cs
- SharedStream.cs
- HostExecutionContextManager.cs
- TrackingStringDictionary.cs
- CallSiteHelpers.cs
- StateItem.cs
- MultiView.cs
- ControlBuilderAttribute.cs
- HitTestWithGeometryDrawingContextWalker.cs
- EdmToObjectNamespaceMap.cs
- DbConnectionOptions.cs
- Context.cs
- CaseInsensitiveComparer.cs
- CheckBox.cs
- MetabaseSettingsIis7.cs
- ColumnClickEvent.cs
- PieceDirectory.cs
- AndCondition.cs