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
- StringValueSerializer.cs
- WCFBuildProvider.cs
- BuiltInExpr.cs
- AsynchronousChannelMergeEnumerator.cs
- CloudCollection.cs
- _ConnectStream.cs
- RoleService.cs
- DetailsViewUpdateEventArgs.cs
- SafeLocalMemHandle.cs
- MatrixStack.cs
- AncillaryOps.cs
- DbConnectionInternal.cs
- TextProviderWrapper.cs
- SecondaryIndexList.cs
- SocketAddress.cs
- SqlConnectionHelper.cs
- ObjectStorage.cs
- BoundField.cs
- PropertyTab.cs
- ResourceDefaultValueAttribute.cs
- PageSettings.cs
- WindowsBrush.cs
- ObservableCollection.cs
- RuntimeComponentFilter.cs
- GeometryConverter.cs
- ReadingWritingEntityEventArgs.cs
- XmlWriterSettings.cs
- KeyTimeConverter.cs
- sqlmetadatafactory.cs
- NullPackagingPolicy.cs
- HiddenFieldPageStatePersister.cs
- InertiaRotationBehavior.cs
- UserControlParser.cs
- SchemaInfo.cs
- GeneratedView.cs
- IndicFontClient.cs
- dataprotectionpermission.cs
- CodeStatement.cs
- PropertyChangingEventArgs.cs
- IResourceProvider.cs
- TableLayout.cs
- ProcessThread.cs
- IndicCharClassifier.cs
- RuleElement.cs
- ThicknessAnimation.cs
- XslException.cs
- ApplicationCommands.cs
- EnumerableRowCollectionExtensions.cs
- SingleResultAttribute.cs
- TextBoxAutoCompleteSourceConverter.cs
- DbParameterCollectionHelper.cs
- DoubleStorage.cs
- DataGrid.cs
- SmtpAuthenticationManager.cs
- PropertyValueUIItem.cs
- VisualBrush.cs
- DropTarget.cs
- CodeAccessSecurityEngine.cs
- ToolStripStatusLabel.cs
- PasswordRecoveryDesigner.cs
- MessageDecoder.cs
- Behavior.cs
- X509Certificate2Collection.cs
- FilteredAttributeCollection.cs
- ScopeElementCollection.cs
- ReadWriteObjectLock.cs
- CatalogZoneBase.cs
- UserControlAutomationPeer.cs
- DocumentGridContextMenu.cs
- JavaScriptSerializer.cs
- RIPEMD160Managed.cs
- PassportAuthenticationEventArgs.cs
- FirstMatchCodeGroup.cs
- TableProvider.cs
- MeasureItemEvent.cs
- LinkArea.cs
- EdmTypeAttribute.cs
- DictionaryKeyPropertyAttribute.cs
- HostedHttpTransportManager.cs
- Encoder.cs
- AspNetSynchronizationContext.cs
- SystemUdpStatistics.cs
- DetailsViewModeEventArgs.cs
- ToolStripHighContrastRenderer.cs
- RegionIterator.cs
- WebControlAdapter.cs
- StaticFileHandler.cs
- DesignerActionPanel.cs
- MatrixStack.cs
- ContextQuery.cs
- String.cs
- ExtensionWindow.cs
- ProgressBar.cs
- BitmapEffectGroup.cs
- TextTreeRootNode.cs
- FormClosedEvent.cs
- TextDecorationCollection.cs
- WebScriptClientGenerator.cs
- TableAdapterManagerGenerator.cs
- UdpDuplexChannel.cs