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
- Win32.cs
- PageAsyncTaskManager.cs
- CustomAttributeBuilder.cs
- IItemProperties.cs
- ToolStripItemCollection.cs
- AutomationPatternInfo.cs
- ObjectDataSourceMethodEditor.cs
- StylusCollection.cs
- ImageUrlEditor.cs
- IApplicationTrustManager.cs
- WebPartConnectionsDisconnectVerb.cs
- WindowsListViewScroll.cs
- UInt16Storage.cs
- SqlXmlStorage.cs
- propertyentry.cs
- XmlSchemaImporter.cs
- RegexNode.cs
- FixedBufferAttribute.cs
- StringSorter.cs
- ThreadPool.cs
- WebPartChrome.cs
- DataGridViewColumnHeaderCell.cs
- XmlSchemaInferenceException.cs
- Win32SafeHandles.cs
- ResourceDescriptionAttribute.cs
- XmlValidatingReader.cs
- Grant.cs
- ValidatorUtils.cs
- FacetChecker.cs
- UpdateTracker.cs
- SQLInt64.cs
- XmlStreamStore.cs
- BasicKeyConstraint.cs
- DictionaryKeyPropertyAttribute.cs
- HostProtectionException.cs
- DbXmlEnabledProviderManifest.cs
- GlyphShapingProperties.cs
- TabItemWrapperAutomationPeer.cs
- RoleGroup.cs
- StateItem.cs
- ApplicationServiceHelper.cs
- TextTreeTextElementNode.cs
- EncryptedXml.cs
- PartitionedStream.cs
- _FtpDataStream.cs
- MethodAccessException.cs
- EDesignUtil.cs
- NetCodeGroup.cs
- FontStretch.cs
- WebPart.cs
- RoleService.cs
- TitleStyle.cs
- Root.cs
- TextEmbeddedObject.cs
- DrawItemEvent.cs
- pingexception.cs
- StyleModeStack.cs
- CqlBlock.cs
- ChannelSinkStacks.cs
- HtmlTableRowCollection.cs
- Transform3DGroup.cs
- DataListCommandEventArgs.cs
- XmlAnyElementAttribute.cs
- CommandManager.cs
- DBConnectionString.cs
- ContextConfiguration.cs
- TCPClient.cs
- ObjectHandle.cs
- SiteMapDataSourceView.cs
- OracleDataAdapter.cs
- Assembly.cs
- NegotiateStream.cs
- SurrogateEncoder.cs
- Operator.cs
- RangeBaseAutomationPeer.cs
- DataSourceControl.cs
- WmfPlaceableFileHeader.cs
- AmbientEnvironment.cs
- CacheDict.cs
- TypeDescriptor.cs
- ValueProviderWrapper.cs
- BamlRecordHelper.cs
- WorkflowTraceTransfer.cs
- DynamicMethod.cs
- InvalidOleVariantTypeException.cs
- SystemWebCachingSectionGroup.cs
- EntityCommandDefinition.cs
- DataGridViewColumnStateChangedEventArgs.cs
- SmtpClient.cs
- XsdCachingReader.cs
- WebPartConnectionsCancelVerb.cs
- IPEndPoint.cs
- GeneralTransform3D.cs
- EntityCommandExecutionException.cs
- Token.cs
- Track.cs
- UpdatePanelTrigger.cs
- JsonEncodingStreamWrapper.cs
- SystemColors.cs
- CompatibleIComparer.cs