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
- NotSupportedException.cs
- FacetChecker.cs
- PathData.cs
- RecommendedAsConfigurableAttribute.cs
- COM2FontConverter.cs
- HashMembershipCondition.cs
- SoapSchemaExporter.cs
- ConditionCollection.cs
- List.cs
- DoneReceivingAsyncResult.cs
- FormViewRow.cs
- RelativeSource.cs
- HandlerFactoryWrapper.cs
- TabPage.cs
- SystemIPInterfaceStatistics.cs
- COM2TypeInfoProcessor.cs
- MULTI_QI.cs
- StorageComplexTypeMapping.cs
- wmiprovider.cs
- GPPOINTF.cs
- ErrorHandler.cs
- SocketException.cs
- EventLogSession.cs
- safex509handles.cs
- Privilege.cs
- EventToken.cs
- DataGridViewHeaderCell.cs
- TemplatePartAttribute.cs
- TextTrailingCharacterEllipsis.cs
- HtmlControlDesigner.cs
- DropSource.cs
- RuleSettingsCollection.cs
- CheckBox.cs
- EditorZoneBase.cs
- Tile.cs
- XmlTextAttribute.cs
- XmlTypeAttribute.cs
- SchemaCollectionCompiler.cs
- DrawToolTipEventArgs.cs
- Screen.cs
- TreeNodeCollection.cs
- EncodingConverter.cs
- SecureConversationServiceCredential.cs
- WebBrowserSiteBase.cs
- ViewKeyConstraint.cs
- OutputCacheSettingsSection.cs
- List.cs
- ConstraintCollection.cs
- AssemblyCache.cs
- ImportCatalogPart.cs
- InfoCardAsymmetricCrypto.cs
- ObjectSet.cs
- ForAllOperator.cs
- ListViewTableRow.cs
- CodeBlockBuilder.cs
- WebPartUtil.cs
- ToolStripGripRenderEventArgs.cs
- DataGridTableCollection.cs
- MetabaseReader.cs
- ParameterCollectionEditor.cs
- SqlCacheDependencyDatabase.cs
- SerializationException.cs
- LogStore.cs
- SchemaImporterExtension.cs
- SmiEventStream.cs
- ServiceReference.cs
- HtmlControl.cs
- HttpCacheParams.cs
- RightsManagementEncryptedStream.cs
- ProcessModelSection.cs
- SecurityResources.cs
- SettingsAttributes.cs
- EventMappingSettingsCollection.cs
- ResizingMessageFilter.cs
- Margins.cs
- Renderer.cs
- AssemblyAttributes.cs
- Mapping.cs
- ToolboxItemLoader.cs
- CustomAttributeBuilder.cs
- XmlDigitalSignatureProcessor.cs
- BlurBitmapEffect.cs
- MaskInputRejectedEventArgs.cs
- wgx_commands.cs
- SQLBytes.cs
- SocketAddress.cs
- CLRBindingWorker.cs
- diagnosticsswitches.cs
- XmlSchemaAnyAttribute.cs
- DefaultProxySection.cs
- LookupNode.cs
- HostedBindingBehavior.cs
- NameValueSectionHandler.cs
- NamedObject.cs
- DataList.cs
- EndOfStreamException.cs
- XmlObjectSerializer.cs
- WebRequestModuleElement.cs
- FileIOPermission.cs
- MimeMapping.cs