Code:
/ FX-1434 / FX-1434 / 1.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
- DesignerActionGlyph.cs
- ClientBuildManager.cs
- Point3DAnimation.cs
- CustomValidator.cs
- TreeNodeSelectionProcessor.cs
- indexingfiltermarshaler.cs
- HealthMonitoringSection.cs
- ApplicationCommands.cs
- formatstringdialog.cs
- DirectoryNotFoundException.cs
- CommandSet.cs
- ModifierKeysConverter.cs
- Utils.cs
- SystemKeyConverter.cs
- Fonts.cs
- MatrixTransform.cs
- XPathAncestorQuery.cs
- KeySplineConverter.cs
- SHA512.cs
- WindowsAltTab.cs
- StrongTypingException.cs
- UniqueIdentifierService.cs
- PictureBox.cs
- TextEffectResolver.cs
- RtfToken.cs
- TableItemProviderWrapper.cs
- PropertyRef.cs
- TraceSource.cs
- linebase.cs
- mediaclock.cs
- ArrayMergeHelper.cs
- Boolean.cs
- XmlSerializerFactory.cs
- RegexCode.cs
- CachedFontFace.cs
- EmptyReadOnlyDictionaryInternal.cs
- WinFormsComponentEditor.cs
- CryptoKeySecurity.cs
- MetadataArtifactLoaderCompositeResource.cs
- PropertyTab.cs
- IISUnsafeMethods.cs
- DefaultPropertyAttribute.cs
- SerializationBinder.cs
- CheckBoxBaseAdapter.cs
- GridViewColumnCollectionChangedEventArgs.cs
- TemplatedWizardStep.cs
- GCHandleCookieTable.cs
- NativeMethods.cs
- _MultipleConnectAsync.cs
- DesignerSerializerAttribute.cs
- UserPersonalizationStateInfo.cs
- BCryptSafeHandles.cs
- XsltException.cs
- QueryOutputWriter.cs
- EntryIndex.cs
- OutputScope.cs
- IdentityReference.cs
- ContentAlignmentEditor.cs
- SchemaCollectionPreprocessor.cs
- ChannelCredentials.cs
- ExternalException.cs
- SecurityUniqueId.cs
- XmlLinkedNode.cs
- COM2EnumConverter.cs
- storepermissionattribute.cs
- CodeArgumentReferenceExpression.cs
- DateRangeEvent.cs
- MailDefinition.cs
- TransactionFlowOption.cs
- ImmutablePropertyDescriptorGridEntry.cs
- KeyboardEventArgs.cs
- AssertHelper.cs
- RegexReplacement.cs
- StreamInfo.cs
- MsmqDecodeHelper.cs
- EntitySqlQueryBuilder.cs
- ObjectCache.cs
- ClientRequest.cs
- ButtonField.cs
- SqlRowUpdatingEvent.cs
- DataStorage.cs
- CdpEqualityComparer.cs
- Point3DCollectionValueSerializer.cs
- CodePageUtils.cs
- PathFigureCollectionConverter.cs
- WebScriptMetadataFormatter.cs
- NativeMethods.cs
- SamlDoNotCacheCondition.cs
- SqlDependency.cs
- TemplatePagerField.cs
- SemanticBasicElement.cs
- DataSpaceManager.cs
- PersonalizationState.cs
- Membership.cs
- XmlDataSourceNodeDescriptor.cs
- ConstraintEnumerator.cs
- DataExpression.cs
- RecordConverter.cs
- DataBindEngine.cs
- EntityConnection.cs