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
- FirstMatchCodeGroup.cs
- Task.cs
- ReadContentAsBinaryHelper.cs
- EdmSchemaError.cs
- ZoomPercentageConverter.cs
- LinqDataSourceInsertEventArgs.cs
- WSSecureConversationFeb2005.cs
- XPathScanner.cs
- PeerCollaborationPermission.cs
- ProviderSettings.cs
- TypeForwardedToAttribute.cs
- ExpressionVisitorHelpers.cs
- InputScopeConverter.cs
- UserControl.cs
- PropertyManager.cs
- ModifyActivitiesPropertyDescriptor.cs
- HttpCacheParams.cs
- SortableBindingList.cs
- FormatException.cs
- EnumConverter.cs
- CapabilitiesAssignment.cs
- MenuItemStyle.cs
- InitializerFacet.cs
- DataGridHeaderBorder.cs
- TypeDependencyAttribute.cs
- AsymmetricKeyExchangeDeformatter.cs
- ImageBrush.cs
- HealthMonitoringSection.cs
- SystemColorTracker.cs
- DataGridItem.cs
- LowerCaseStringConverter.cs
- MaxMessageSizeStream.cs
- ConnectionOrientedTransportBindingElement.cs
- HtmlControlPersistable.cs
- PickBranch.cs
- XmlDataSourceNodeDescriptor.cs
- DataGridBoundColumn.cs
- XmlCustomFormatter.cs
- DataContext.cs
- XmlSerializerOperationFormatter.cs
- ProcessInputEventArgs.cs
- EditorZoneBase.cs
- thaishape.cs
- Component.cs
- EntitySetBaseCollection.cs
- FilteredXmlReader.cs
- StateInitializationDesigner.cs
- ConsoleKeyInfo.cs
- ExpandedWrapper.cs
- AnimationClockResource.cs
- TouchesOverProperty.cs
- ExclusiveTcpTransportManager.cs
- MethodInfo.cs
- StandardToolWindows.cs
- ActivationWorker.cs
- DataSourceNameHandler.cs
- BitStream.cs
- SizeKeyFrameCollection.cs
- ByteKeyFrameCollection.cs
- ConfigurationElement.cs
- MdiWindowListItemConverter.cs
- DebuggerService.cs
- UnknownBitmapDecoder.cs
- SiteOfOriginContainer.cs
- EventLogPermissionEntryCollection.cs
- FormParameter.cs
- FormViewRow.cs
- Renderer.cs
- WebSysDisplayNameAttribute.cs
- XamlTypeMapper.cs
- HttpClientCertificate.cs
- cookiecontainer.cs
- JsonObjectDataContract.cs
- BulletedListEventArgs.cs
- TouchesOverProperty.cs
- TraceHandler.cs
- NonSerializedAttribute.cs
- XsdDateTime.cs
- SrgsOneOf.cs
- EntityDataSourceQueryBuilder.cs
- ReplyChannel.cs
- DoubleCollectionValueSerializer.cs
- DiscoveryExceptionDictionary.cs
- DataContractSerializer.cs
- HtmlImage.cs
- SoapFault.cs
- _AutoWebProxyScriptWrapper.cs
- ToolStripLabel.cs
- StateRuntime.cs
- SettingsPropertyValue.cs
- TextRangeSerialization.cs
- SmtpException.cs
- ProxyHwnd.cs
- IOException.cs
- HtmlFormParameterReader.cs
- XmlSerializerVersionAttribute.cs
- PropertyReferenceExtension.cs
- UnauthorizedAccessException.cs
- XPathBuilder.cs
- XmlSchemaParticle.cs