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 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
- OleDbReferenceCollection.cs
- DbDataRecord.cs
- Message.cs
- AuthenticateEventArgs.cs
- Soap.cs
- CompatibleComparer.cs
- CellParaClient.cs
- ScriptResourceInfo.cs
- ErrorEventArgs.cs
- ColumnProvider.cs
- SiteMapNodeItemEventArgs.cs
- Rotation3DAnimation.cs
- SelectionProviderWrapper.cs
- _NegoStream.cs
- Debugger.cs
- DataKeyPropertyAttribute.cs
- EnumConverter.cs
- PKCS1MaskGenerationMethod.cs
- XmlNullResolver.cs
- AddInSegmentDirectoryNotFoundException.cs
- ClientFormsAuthenticationMembershipProvider.cs
- TextDocumentView.cs
- LineBreak.cs
- BasicViewGenerator.cs
- SBCSCodePageEncoding.cs
- IsolatedStorage.cs
- StylusCollection.cs
- ConfigurationPermission.cs
- CommandBinding.cs
- WrappedIUnknown.cs
- ChannelServices.cs
- UpDownEvent.cs
- ViewStateModeByIdAttribute.cs
- InputQueue.cs
- ShutDownListener.cs
- PresentationTraceSources.cs
- SelectedDatesCollection.cs
- DesignerPerfEventProvider.cs
- VoiceChangeEventArgs.cs
- InstanceKeyNotReadyException.cs
- PropertyGridView.cs
- Schema.cs
- ApplicationSecurityManager.cs
- DefaultPrintController.cs
- DataFormats.cs
- SspiSafeHandles.cs
- followingsibling.cs
- RowToParametersTransformer.cs
- SiteMapDataSource.cs
- TheQuery.cs
- ReflectionPermission.cs
- SynchronizingStream.cs
- VirtualizedItemPattern.cs
- ValuePattern.cs
- SoapObjectReader.cs
- XmlText.cs
- PeerPresenceInfo.cs
- GeneratedView.cs
- CompiledWorkflowDefinitionContext.cs
- EntityObject.cs
- DataChangedEventManager.cs
- ControlDesigner.cs
- TabPanel.cs
- UserPreference.cs
- FilteredDataSetHelper.cs
- Configuration.cs
- WebPartChrome.cs
- METAHEADER.cs
- NullableDecimalAverageAggregationOperator.cs
- IDReferencePropertyAttribute.cs
- FormViewInsertedEventArgs.cs
- TemplatePartAttribute.cs
- CLSCompliantAttribute.cs
- Funcletizer.cs
- CultureInfoConverter.cs
- Privilege.cs
- SqlDependencyListener.cs
- TypedReference.cs
- DescendantQuery.cs
- AsymmetricAlgorithm.cs
- GZipStream.cs
- InputLanguage.cs
- ReachPrintTicketSerializer.cs
- XslTransform.cs
- Authorization.cs
- ConnectionPool.cs
- HttpCachePolicyElement.cs
- SymmetricCryptoHandle.cs
- StorageScalarPropertyMapping.cs
- WindowsToolbar.cs
- EncryptionUtility.cs
- ObjectKeyFrameCollection.cs
- AddressHeader.cs
- FormViewInsertedEventArgs.cs
- SaveFileDialog.cs
- DesignerProperties.cs
- DataColumnChangeEvent.cs
- AssemblyHash.cs
- SynchronizingStream.cs
- HtmlInputRadioButton.cs