Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
// 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
- ClientSideProviderDescription.cs
- SchemaNames.cs
- ItemCheckEvent.cs
- DynamicResourceExtensionConverter.cs
- dataobject.cs
- ProvidersHelper.cs
- FormatterConverter.cs
- RedistVersionInfo.cs
- SplitContainer.cs
- ArrayElementGridEntry.cs
- ReachSerializer.cs
- QueryCursorEventArgs.cs
- TextServicesPropertyRanges.cs
- ResourceExpressionBuilder.cs
- AnnotationStore.cs
- PrintDialog.cs
- StringToken.cs
- HashAlgorithm.cs
- DocComment.cs
- Environment.cs
- IListConverters.cs
- WorkItem.cs
- CharacterMetricsDictionary.cs
- XmlSchemaComplexContentExtension.cs
- ServiceBusyException.cs
- TimersDescriptionAttribute.cs
- HostVisual.cs
- DefinitionBase.cs
- PhonemeEventArgs.cs
- X509Chain.cs
- Transactions.cs
- WebAdminConfigurationHelper.cs
- WorkflowViewElement.cs
- FreeFormDesigner.cs
- ColumnResizeAdorner.cs
- DragDrop.cs
- PhonemeEventArgs.cs
- ParamArrayAttribute.cs
- ConstantSlot.cs
- HtmlTableRow.cs
- SqlDataReader.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- ServiceOperationInvoker.cs
- WebPartConnectionsCancelEventArgs.cs
- AttachmentService.cs
- IssuanceTokenProviderState.cs
- HtmlFormParameterWriter.cs
- TemplateControlBuildProvider.cs
- JsonServiceDocumentSerializer.cs
- SurrogateEncoder.cs
- UriWriter.cs
- LinqDataSourceInsertEventArgs.cs
- DefaultPropertyAttribute.cs
- FormattedTextSymbols.cs
- RequiredFieldValidator.cs
- CodeBlockBuilder.cs
- ValidationHelpers.cs
- SoapServerMessage.cs
- DesignerProperties.cs
- KeyNotFoundException.cs
- RunWorkerCompletedEventArgs.cs
- SafeViewOfFileHandle.cs
- NotifyParentPropertyAttribute.cs
- ProtocolViolationException.cs
- SmiRecordBuffer.cs
- Error.cs
- HtmlMeta.cs
- DSASignatureFormatter.cs
- QilTypeChecker.cs
- ClaimTypeElementCollection.cs
- PhysicalOps.cs
- WebEncodingValidator.cs
- SerializationInfoEnumerator.cs
- ProjectionPathSegment.cs
- ControlBindingsCollection.cs
- XmlImplementation.cs
- Component.cs
- DataControlCommands.cs
- CLRBindingWorker.cs
- IteratorFilter.cs
- MediaTimeline.cs
- CompiledScopeCriteria.cs
- RepeatBehavior.cs
- SelectionItemPattern.cs
- TagPrefixAttribute.cs
- SoapSchemaExporter.cs
- WebPartZoneDesigner.cs
- Latin1Encoding.cs
- MD5.cs
- WindowsScrollBarBits.cs
- GroupStyle.cs
- WindowsListView.cs
- SQLByte.cs
- EntityContainerAssociationSet.cs
- IncrementalCompileAnalyzer.cs
- DrawingVisual.cs
- StandardTransformFactory.cs
- ListView.cs
- ScriptReference.cs
- UIAgentRequest.cs