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
- ColorContextHelper.cs
- ProxyManager.cs
- Bezier.cs
- StoreContentChangedEventArgs.cs
- Trigger.cs
- LineBreak.cs
- AmbientLight.cs
- DesignerGeometryHelper.cs
- StaticSiteMapProvider.cs
- CapabilitiesState.cs
- RecognizerInfo.cs
- XmlTypeAttribute.cs
- RuntimeEnvironment.cs
- WinEventQueueItem.cs
- TaskForm.cs
- SqlDependency.cs
- dsa.cs
- DataGridDetailsPresenter.cs
- ResourcesBuildProvider.cs
- UnitControl.cs
- ScriptComponentDescriptor.cs
- TableLayoutColumnStyleCollection.cs
- SocketException.cs
- StoreItemCollection.cs
- ListDictionary.cs
- WpfXamlLoader.cs
- documentation.cs
- IsolatedStorageFile.cs
- ChangeNode.cs
- ManagementNamedValueCollection.cs
- InfoCardTraceRecord.cs
- AssemblyCollection.cs
- WebBrowserDocumentCompletedEventHandler.cs
- PropertyDescriptorGridEntry.cs
- MulticastNotSupportedException.cs
- UInt64Storage.cs
- Propagator.cs
- GenericEnumConverter.cs
- WeakReadOnlyCollection.cs
- MultitargetingHelpers.cs
- DefaultSection.cs
- TabItemAutomationPeer.cs
- HealthMonitoringSection.cs
- ObjectListSelectEventArgs.cs
- GenericTypeParameterBuilder.cs
- WS2007HttpBinding.cs
- ParameterReplacerVisitor.cs
- BitVector32.cs
- BitConverter.cs
- OleDbPermission.cs
- PrivilegedConfigurationManager.cs
- ProcessHost.cs
- StringBuilder.cs
- HtmlTextArea.cs
- Metadata.cs
- DbParameterCollectionHelper.cs
- HebrewNumber.cs
- ComPlusTypeValidator.cs
- DataGridViewImageCell.cs
- PtsHost.cs
- GroupLabel.cs
- FixedSOMTextRun.cs
- DataGridTablesFactory.cs
- XmlQueryStaticData.cs
- JapaneseLunisolarCalendar.cs
- FamilyTypefaceCollection.cs
- ConnectionPoint.cs
- XPathException.cs
- PropertyEmitter.cs
- InvalidPrinterException.cs
- BitmapVisualManager.cs
- SmiEventSink_DeferedProcessing.cs
- AsymmetricKeyExchangeFormatter.cs
- ColorMatrix.cs
- InvocationExpression.cs
- SequenceNumber.cs
- uribuilder.cs
- LineBreakRecord.cs
- WebControl.cs
- PasswordBoxAutomationPeer.cs
- TextPatternIdentifiers.cs
- XmlSchemaInferenceException.cs
- CfgParser.cs
- RangeValuePatternIdentifiers.cs
- ObjectHelper.cs
- BooleanSwitch.cs
- EntityContainerRelationshipSet.cs
- PathGeometry.cs
- XamlStream.cs
- BinaryConverter.cs
- Latin1Encoding.cs
- ConfigurationSectionGroupCollection.cs
- MatrixTransform3D.cs
- VBIdentifierName.cs
- VersionedStreamOwner.cs
- SendOperation.cs
- EventLogPermissionEntry.cs
- _SslStream.cs
- BindingMemberInfo.cs
- SqlSelectStatement.cs