Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / CompMod / System / Diagnostics / TraceSource.cs / 1 / TraceSource.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using System.Configuration; using System.Security; using System.Security.Permissions; namespace System.Diagnostics { public class TraceSource { private static Listtracesources = new List (); private readonly TraceEventCache manager = new TraceEventCache(); private SourceSwitch internalSwitch; private TraceListenerCollection listeners; private StringDictionary attributes; private SourceLevels switchLevel; private string sourceName; internal bool _initCalled = false; // Whether we've called Initialize already. public TraceSource(string name) : this(name, SourceLevels.Off) { } public TraceSource(string name, SourceLevels defaultLevel) { if (name == null) throw new ArgumentNullException("name"); if (name.Length == 0) throw new ArgumentException("name"); sourceName = name; switchLevel = defaultLevel; // Delay load config to avoid perf (and working set) issues in retail // Add a weakreference to this source lock(tracesources) { tracesources.Add(new WeakReference(this)); } } private void Initialize() { if (!_initCalled) { lock(this) { if (_initCalled) return; SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { SourceElement sourceElement = sourceElements[sourceName]; if (sourceElement != null) { if (!String.IsNullOrEmpty(sourceElement.SwitchName)) { CreateSwitch(sourceElement.SwitchType, sourceElement.SwitchName); } else { CreateSwitch(sourceElement.SwitchType, sourceName); if (!String.IsNullOrEmpty(sourceElement.SwitchValue)) internalSwitch.Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), sourceElement.SwitchValue); } listeners = sourceElement.Listeners.GetRuntimeObject(); attributes = new StringDictionary(); TraceUtils.VerifyAttributes(sourceElement.Attributes, GetSupportedAttributes(), this); attributes.contents = sourceElement.Attributes; } else NoConfigInit(); } else NoConfigInit(); _initCalled = true; } } } private void NoConfigInit() { internalSwitch = new SourceSwitch(sourceName, switchLevel.ToString()); listeners = new TraceListenerCollection(); listeners.Add(new DefaultTraceListener()); attributes = null; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public void Close() { // No need to call Initialize() if (listeners != null) { // Use global lock lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Close(); } } } } public void Flush() { // No need to call Initialize() if (listeners != null) { if (TraceInternal.UseGlobalLock) { lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Flush(); } } } else { foreach (TraceListener listener in listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.Flush(); } } else { listener.Flush(); } } } } } virtual protected internal string[] GetSupportedAttributes() { return null; } internal static void RefreshAll() { lock (tracesources) { for (int i=0; i // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using System.Configuration; using System.Security; using System.Security.Permissions; namespace System.Diagnostics { public class TraceSource { private static List tracesources = new List (); private readonly TraceEventCache manager = new TraceEventCache(); private SourceSwitch internalSwitch; private TraceListenerCollection listeners; private StringDictionary attributes; private SourceLevels switchLevel; private string sourceName; internal bool _initCalled = false; // Whether we've called Initialize already. public TraceSource(string name) : this(name, SourceLevels.Off) { } public TraceSource(string name, SourceLevels defaultLevel) { if (name == null) throw new ArgumentNullException("name"); if (name.Length == 0) throw new ArgumentException("name"); sourceName = name; switchLevel = defaultLevel; // Delay load config to avoid perf (and working set) issues in retail // Add a weakreference to this source lock(tracesources) { tracesources.Add(new WeakReference(this)); } } private void Initialize() { if (!_initCalled) { lock(this) { if (_initCalled) return; SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { SourceElement sourceElement = sourceElements[sourceName]; if (sourceElement != null) { if (!String.IsNullOrEmpty(sourceElement.SwitchName)) { CreateSwitch(sourceElement.SwitchType, sourceElement.SwitchName); } else { CreateSwitch(sourceElement.SwitchType, sourceName); if (!String.IsNullOrEmpty(sourceElement.SwitchValue)) internalSwitch.Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), sourceElement.SwitchValue); } listeners = sourceElement.Listeners.GetRuntimeObject(); attributes = new StringDictionary(); TraceUtils.VerifyAttributes(sourceElement.Attributes, GetSupportedAttributes(), this); attributes.contents = sourceElement.Attributes; } else NoConfigInit(); } else NoConfigInit(); _initCalled = true; } } } private void NoConfigInit() { internalSwitch = new SourceSwitch(sourceName, switchLevel.ToString()); listeners = new TraceListenerCollection(); listeners.Add(new DefaultTraceListener()); attributes = null; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public void Close() { // No need to call Initialize() if (listeners != null) { // Use global lock lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Close(); } } } } public void Flush() { // No need to call Initialize() if (listeners != null) { if (TraceInternal.UseGlobalLock) { lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Flush(); } } } else { foreach (TraceListener listener in listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.Flush(); } } else { listener.Flush(); } } } } } virtual protected internal string[] GetSupportedAttributes() { return null; } internal static void RefreshAll() { lock (tracesources) { for (int i=0; i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ColumnResizeUndoUnit.cs
- ObjectSecurity.cs
- GcSettings.cs
- BrushValueSerializer.cs
- XmlUtilWriter.cs
- PngBitmapEncoder.cs
- EtwTrace.cs
- MergePropertyDescriptor.cs
- IDReferencePropertyAttribute.cs
- WebConfigurationHost.cs
- HttpRequestCacheValidator.cs
- ToolStripItemGlyph.cs
- HebrewCalendar.cs
- StylusPointPropertyInfo.cs
- ListViewItem.cs
- TreeNodeCollection.cs
- TrustLevel.cs
- XmlName.cs
- LayoutTable.cs
- TextReader.cs
- XPathEmptyIterator.cs
- WindowsFormsSectionHandler.cs
- IdentityReference.cs
- ListViewItem.cs
- KnownBoxes.cs
- wmiprovider.cs
- UpWmlPageAdapter.cs
- CaseInsensitiveHashCodeProvider.cs
- ClrProviderManifest.cs
- DataBinder.cs
- XmlSchemaDatatype.cs
- ScriptReferenceBase.cs
- StateItem.cs
- _TLSstream.cs
- Compilation.cs
- EventHandlerList.cs
- RoutingChannelExtension.cs
- SkinBuilder.cs
- ConsumerConnectionPointCollection.cs
- UIAgentCrashedException.cs
- SafeBitVector32.cs
- OdbcConnectionOpen.cs
- PipelineDeploymentState.cs
- COM2TypeInfoProcessor.cs
- SystemResourceKey.cs
- WindowsListViewItem.cs
- XmlBaseWriter.cs
- ConfigXmlWhitespace.cs
- ObjectItemCollection.cs
- NestPullup.cs
- MouseButton.cs
- ResourceType.cs
- DataObjectEventArgs.cs
- PingOptions.cs
- ModelItemKeyValuePair.cs
- SqlMultiplexer.cs
- IgnoreSectionHandler.cs
- Typography.cs
- BitmapEffectState.cs
- EdgeProfileValidation.cs
- CodeLabeledStatement.cs
- ScriptingWebServicesSectionGroup.cs
- ResourceDescriptionAttribute.cs
- MyContact.cs
- PointCollectionValueSerializer.cs
- Image.cs
- ConnectionsZone.cs
- GatewayIPAddressInformationCollection.cs
- Menu.cs
- PeerInvitationResponse.cs
- Activator.cs
- Int64Storage.cs
- CommentGlyph.cs
- XhtmlConformanceSection.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- FreeFormDragDropManager.cs
- Int32Animation.cs
- ArraySet.cs
- HashRepartitionStream.cs
- ListBox.cs
- CoreSwitches.cs
- PermissionSetEnumerator.cs
- TypeSystemHelpers.cs
- EntityDataSourceMemberPath.cs
- StrokeIntersection.cs
- AttributeTable.cs
- RawStylusInputCustomDataList.cs
- BinaryNegotiation.cs
- NonSerializedAttribute.cs
- x509store.cs
- AtomServiceDocumentSerializer.cs
- xml.cs
- BrowserDefinitionCollection.cs
- TokenBasedSetEnumerator.cs
- Module.cs
- WhitespaceRuleReader.cs
- Variant.cs
- XmlUrlResolver.cs
- DefaultValueTypeConverter.cs
- XPathAxisIterator.cs