Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Pen.cs
- InputProcessorProfilesLoader.cs
- SQLConvert.cs
- ListView.cs
- Utils.cs
- ViewBase.cs
- InheritanceContextHelper.cs
- PageFunction.cs
- WindowsToolbar.cs
- XComponentModel.cs
- AttributeData.cs
- DataSourceCache.cs
- SocketConnection.cs
- PerfService.cs
- MonthCalendar.cs
- StrokeNodeOperations.cs
- RegistrySecurity.cs
- DBSqlParser.cs
- TreeView.cs
- XPathDescendantIterator.cs
- Variable.cs
- RowType.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- MultipleViewPatternIdentifiers.cs
- DeviceSpecificDesigner.cs
- X509CertificateValidator.cs
- xamlnodes.cs
- Stack.cs
- PerformanceCounterManager.cs
- QueryOpeningEnumerator.cs
- ResourcePermissionBase.cs
- TextRenderingModeValidation.cs
- SamlAuthenticationClaimResource.cs
- SortDescriptionCollection.cs
- DataSourceControlBuilder.cs
- MetaType.cs
- DocumentOrderQuery.cs
- TreeNodeCollectionEditor.cs
- Currency.cs
- ComponentSerializationService.cs
- DataRowChangeEvent.cs
- DataSourceHelper.cs
- StateMachineWorkflow.cs
- SmtpNetworkElement.cs
- SpoolingTask.cs
- StrokeNodeOperations.cs
- InvalidFilterCriteriaException.cs
- WebHttpBindingElement.cs
- AudioFormatConverter.cs
- AutomationTextAttribute.cs
- Subtree.cs
- SelectionHighlightInfo.cs
- ElementUtil.cs
- WebServiceFaultDesigner.cs
- listitem.cs
- PartitionedDataSource.cs
- ClientRuntimeConfig.cs
- RenderData.cs
- TextCollapsingProperties.cs
- FocusManager.cs
- MimePart.cs
- InputScopeAttribute.cs
- TransformPattern.cs
- SystemParameters.cs
- LinqDataSourceInsertEventArgs.cs
- ServerValidateEventArgs.cs
- SystemNetworkInterface.cs
- FrameworkElementFactoryMarkupObject.cs
- UIElementParaClient.cs
- ButtonFlatAdapter.cs
- AnnotationResource.cs
- CapabilitiesState.cs
- Pool.cs
- WebUtility.cs
- StrokeNodeData.cs
- SQlBooleanStorage.cs
- Listen.cs
- RegexReplacement.cs
- MutexSecurity.cs
- SqlMethodCallConverter.cs
- ImageMetadata.cs
- DoubleCollection.cs
- InputEventArgs.cs
- DesignerProperties.cs
- CodeIdentifier.cs
- SectionInput.cs
- InheritedPropertyChangedEventArgs.cs
- ExpressionBuilder.cs
- FastPropertyAccessor.cs
- GrammarBuilderDictation.cs
- HMACRIPEMD160.cs
- FunctionImportElement.cs
- ParameterReplacerVisitor.cs
- ProtocolElementCollection.cs
- X509CertificateCollection.cs
- AutomationPatternInfo.cs
- CodeObject.cs
- IsolatedStoragePermission.cs
- SmiContext.cs
- OdbcConnectionOpen.cs