Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- URL.cs
- DesignerToolStripControlHost.cs
- ProfessionalColors.cs
- RowToParametersTransformer.cs
- SamlSerializer.cs
- RelationshipEnd.cs
- ExtendedProtectionPolicy.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- FilterElement.cs
- MetadataSource.cs
- DefaultValueAttribute.cs
- EventTrigger.cs
- BreakRecordTable.cs
- Error.cs
- ValuePatternIdentifiers.cs
- SmtpClient.cs
- TimeZone.cs
- SemaphoreSecurity.cs
- DesignerRegionCollection.cs
- ObjectItemCollection.cs
- TriggerCollection.cs
- X509PeerCertificateAuthenticationElement.cs
- PersistenceContextEnlistment.cs
- DataGridColumn.cs
- IsolationInterop.cs
- IgnoreFlushAndCloseStream.cs
- Solver.cs
- DbExpressionRules.cs
- PermissionSetEnumerator.cs
- FrameworkTemplate.cs
- TypeGenericEnumerableViewSchema.cs
- FloaterBaseParagraph.cs
- DPCustomTypeDescriptor.cs
- LinqExpressionNormalizer.cs
- WebPartVerbsEventArgs.cs
- WebRequestModuleElementCollection.cs
- HashHelper.cs
- LinkButton.cs
- VerbConverter.cs
- XmlSchemaSimpleTypeRestriction.cs
- ServerType.cs
- DurationConverter.cs
- UnicastIPAddressInformationCollection.cs
- OpenTypeLayoutCache.cs
- RequestReplyCorrelator.cs
- TogglePattern.cs
- EntityDataSourceMemberPath.cs
- FormsAuthenticationConfiguration.cs
- DesignerDataConnection.cs
- CustomAttribute.cs
- AsyncMethodInvoker.cs
- ExceptionTrace.cs
- PermissionAttributes.cs
- SoapException.cs
- StringValueConverter.cs
- TextServicesPropertyRanges.cs
- CasesDictionary.cs
- Parser.cs
- SettingsBindableAttribute.cs
- Rfc2898DeriveBytes.cs
- Message.cs
- OperationContractAttribute.cs
- ExceptionHelpers.cs
- MetadataProperty.cs
- DataGridTextBoxColumn.cs
- WebPartActionVerb.cs
- ActionItem.cs
- TdsParserStateObject.cs
- CacheEntry.cs
- PipeStream.cs
- RemoteWebConfigurationHost.cs
- TableCellCollection.cs
- HttpResponseBase.cs
- Function.cs
- XmlNodeReader.cs
- SessionSymmetricMessageSecurityProtocolFactory.cs
- StateDesignerConnector.cs
- HttpResponse.cs
- TimeManager.cs
- Color.cs
- XmlNodeReader.cs
- RemotingServices.cs
- ToolStripMenuItem.cs
- JoinSymbol.cs
- StylusPointProperty.cs
- CommandConverter.cs
- IPipelineRuntime.cs
- ParserExtension.cs
- ParagraphVisual.cs
- SelectManyQueryOperator.cs
- ResolveDuplexCD1AsyncResult.cs
- Freezable.cs
- XmlSchemaSearchPattern.cs
- CodeObject.cs
- TextModifierScope.cs
- JoinCqlBlock.cs
- RemotingServices.cs
- GPRECT.cs
- Shape.cs
- XmlSerializerSection.cs