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
- SafeRightsManagementEnvironmentHandle.cs
- DataGridViewColumnTypeEditor.cs
- HwndHost.cs
- TimeoutValidationAttribute.cs
- DbConnectionPool.cs
- RemotingServices.cs
- BulletedListEventArgs.cs
- InstancePersistenceEvent.cs
- EndpointDiscoveryMetadata11.cs
- X509IssuerSerialKeyIdentifierClause.cs
- CollectionBuilder.cs
- SystemIPGlobalProperties.cs
- NodeLabelEditEvent.cs
- Pen.cs
- SqlErrorCollection.cs
- GenericAuthenticationEventArgs.cs
- PrincipalPermission.cs
- TextTreeDeleteContentUndoUnit.cs
- XmlQualifiedName.cs
- CodeSubDirectoriesCollection.cs
- TableCell.cs
- OLEDB_Util.cs
- BitmapData.cs
- HyperLinkStyle.cs
- AccessDataSource.cs
- SiteMapProvider.cs
- DataGridViewTextBoxCell.cs
- SqlServices.cs
- Geometry.cs
- MaterializeFromAtom.cs
- RayHitTestParameters.cs
- TreeNodeCollectionEditorDialog.cs
- RegisteredArrayDeclaration.cs
- PackageProperties.cs
- XmlKeywords.cs
- EntityObject.cs
- DesignerInterfaces.cs
- BaseAddressElementCollection.cs
- CustomLineCap.cs
- MessageBuffer.cs
- ResourcePermissionBase.cs
- Queue.cs
- AncillaryOps.cs
- Emitter.cs
- RegexBoyerMoore.cs
- DataGridAutoFormat.cs
- TextElementEnumerator.cs
- Viewport3DVisual.cs
- GroupBoxRenderer.cs
- ControlPager.cs
- HashLookup.cs
- StringInfo.cs
- DebugInfo.cs
- SymbolType.cs
- DataQuery.cs
- MethodBody.cs
- Stack.cs
- SqlProfileProvider.cs
- WebReferenceOptions.cs
- ControlParameter.cs
- RIPEMD160Managed.cs
- CodeTypeParameter.cs
- HWStack.cs
- EtwTrace.cs
- ProfileManager.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- VBCodeProvider.cs
- SocketInformation.cs
- FilterElement.cs
- CreateInstanceBinder.cs
- MemberAssignmentAnalysis.cs
- TextRangeBase.cs
- XpsResource.cs
- Binding.cs
- BitmapEffectState.cs
- FormViewDeleteEventArgs.cs
- DesignerTransaction.cs
- LinkUtilities.cs
- StorageConditionPropertyMapping.cs
- TryCatch.cs
- FamilyCollection.cs
- CorrelationActionMessageFilter.cs
- AsyncPostBackErrorEventArgs.cs
- PostBackOptions.cs
- ScrollableControl.cs
- DataObject.cs
- FromRequest.cs
- sapiproxy.cs
- RemoteWebConfigurationHost.cs
- ServiceModelSectionGroup.cs
- InstanceKeyCompleteException.cs
- XPathNode.cs
- GetPageCompletedEventArgs.cs
- BasicViewGenerator.cs
- UrlAuthFailedErrorFormatter.cs
- SigningCredentials.cs
- FixedTextPointer.cs
- ReaderContextStackData.cs
- RedistVersionInfo.cs
- PbrsForward.cs