Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / CompMod / System / Diagnostics / TraceListener.cs / 1 / TraceListener.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
*/
namespace System.Diagnostics {
using System;
using System.Text;
using System.Security.Permissions;
using System.Collections.Specialized;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Collections;
using System.Configuration;
using System.Runtime.Versioning;
///
/// Provides the base class for the listeners who
/// monitor trace and debug output.
///
[HostProtection(Synchronization=true)]
public abstract class TraceListener : MarshalByRefObject, IDisposable {
int indentLevel;
int indentSize = 4;
TraceOptions traceOptions = TraceOptions.None;
bool needIndent = true;
string listenerName;
TraceFilter filter = null;
StringDictionary attributes;
internal string initializeData;
///
/// Initializes a new instance of the class.
///
protected TraceListener () {
}
///
/// Initializes a new instance of the class using the specified name as the
/// listener.
///
protected TraceListener(string name) {
this.listenerName = name;
}
public StringDictionary Attributes {
get {
if (attributes == null)
attributes = new StringDictionary();
return attributes;
}
}
///
/// Gets or sets a name for this .
///
public virtual string Name {
get { return (listenerName == null) ? "" : listenerName; }
set { listenerName = value; }
}
public virtual bool IsThreadSafe {
get { return false; }
}
///
///
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
///
///
protected virtual void Dispose(bool disposing) {
return;
}
///
/// When overridden in a derived class, closes the output stream
/// so that it no longer receives tracing or debugging output.
///
public virtual void Close() {
return;
}
///
/// When overridden in a derived class, flushes the output buffer.
///
public virtual void Flush() {
return;
}
///
/// Gets or sets the indent level.
///
public int IndentLevel {
get {
return indentLevel;
}
set {
indentLevel = (value < 0) ? 0 : value;
}
}
///
/// Gets or sets the number of spaces in an indent.
///
public int IndentSize {
get {
return indentSize;
}
set {
if (value < 0)
throw new ArgumentOutOfRangeException("IndentSize", value, SR.GetString(SR.TraceListenerIndentSize));
indentSize = value;
}
}
[
ComVisible(false)
]
public TraceFilter Filter {
get {
return filter;
}
set {
filter = value;
}
}
///
/// Gets or sets a value indicating whether an indent is needed.
///
protected bool NeedIndent {
get {
return needIndent;
}
set {
needIndent = value;
}
}
[
ComVisible(false)
]
public TraceOptions TraceOutputOptions {
get { return traceOptions; }
set {
if (( (int) value >> 6) != 0) {
throw new ArgumentOutOfRangeException("value");
}
traceOptions = value;
}
}
internal void SetAttributes(Hashtable attribs) {
TraceUtils.VerifyAttributes(attribs, GetSupportedAttributes(), this);
attributes = new StringDictionary();
attributes.contents = attribs;
}
///
/// Emits or displays a message for an assertion that always fails.
///
public virtual void Fail(string message) {
Fail(message, null);
}
///
/// Emits or displays messages for an assertion that always fails.
///
public virtual void Fail(string message, string detailMessage) {
StringBuilder failMessage = new StringBuilder();
failMessage.Append(SR.GetString(SR.TraceListenerFail));
failMessage.Append(" ");
failMessage.Append(message);
if (detailMessage != null) {
failMessage.Append(" ");
failMessage.Append(detailMessage);
}
WriteLine(failMessage.ToString());
}
virtual protected internal string[] GetSupportedAttributes() {
return null;
}
///
/// When overridden in a derived class, writes the specified
/// message to the listener you specify in the derived class.
///
public abstract void Write(string message);
///
/// Writes the name of the parameter to the listener you specify when you inherit from the
/// class.
///
public virtual void Write(object o) {
if (Filter != null && !Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, null, null, o))
return;
if (o == null) return;
Write(o.ToString());
}
///
/// Writes a category name and a message to the listener you specify when you
/// inherit from the
/// class.
///
public virtual void Write(string message, string category) {
if (Filter != null && !Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, message))
return;
if (category == null)
Write(message);
else
Write(category + ": " + ((message == null) ? string.Empty : message));
}
///
/// Writes a category name and the name of the parameter to the listener you
/// specify when you inherit from the
/// class.
///
public virtual void Write(object o, string category) {
if (Filter != null && !Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, category, null, o))
return;
if (category == null)
Write(o);
else
Write(o == null ? "" : o.ToString(), category);
}
///
/// Writes the indent to the listener you specify when you
/// inherit from the
/// class, and resets the property to .
///
protected virtual void WriteIndent() {
NeedIndent = false;
for (int i = 0; i < indentLevel; i++) {
if (indentSize == 4)
Write(" ");
else {
for (int j = 0; j < indentSize; j++) {
Write(" ");
}
}
}
}
///
/// When overridden in a derived class, writes a message to the listener you specify in
/// the derived class, followed by a line terminator. The default line terminator is a carriage return followed
/// by a line feed (\r\n).
///
public abstract void WriteLine(string message);
///
/// Writes the name of the parameter to the listener you specify when you inherit from the class, followed by a line terminator. The default line terminator is a
/// carriage return followed by a line feed
/// (\r\n).
///
public virtual void WriteLine(object o) {
if (Filter != null && !Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, null, null, o))
return;
WriteLine(o == null ? "" : o.ToString());
}
///
/// Writes a category name and a message to the listener you specify when you
/// inherit from the class,
/// followed by a line terminator. The default line terminator is a carriage return followed by a line feed (\r\n).
///
public virtual void WriteLine(string message, string category) {
if (Filter != null && !Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, message))
return;
if (category == null)
WriteLine(message);
else
WriteLine(category + ": " + ((message == null) ? string.Empty : message));
}
///
/// Writes a category
/// name and the name of the parameter to the listener you
/// specify when you inherit from the
/// class, followed by a line terminator. The default line terminator is a carriage
/// return followed by a line feed (\r\n).
///
public virtual void WriteLine(object o, string category) {
if (Filter != null && !Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, category, null, o))
return;
WriteLine(o == null ? "" : o.ToString(), category);
}
// new write methods used by TraceSource
[
ComVisible(false)
]
public virtual void TraceData(TraceEventCache eventCache, String source, TraceEventType eventType, int id, object data) {
if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null, null, data))
return;
WriteHeader(source, eventType, id);
string datastring = String.Empty;
if (data != null)
datastring = data.ToString();
WriteLine(datastring);
WriteFooter(eventCache);
}
[
ComVisible(false)
]
public virtual void TraceData(TraceEventCache eventCache, String source, TraceEventType eventType, int id, params object[] data) {
if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, null, null, null, data))
return;
WriteHeader(source, eventType, id);
StringBuilder sb = new StringBuilder();
if (data != null) {
for (int i=0; i< data.Length; i++) {
if (i != 0)
sb.Append(", ");
if (data[i] != null)
sb.Append(data[i].ToString());
}
}
WriteLine(sb.ToString());
WriteFooter(eventCache);
}
[
ComVisible(false)
]
public virtual void TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, int id) {
TraceEvent(eventCache, source, eventType, id, String.Empty);
}
// All other TraceEvent methods come through this one.
[
ComVisible(false)
]
public virtual void TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, int id, string message) {
if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, message))
return;
WriteHeader(source, eventType, id);
WriteLine(message);
WriteFooter(eventCache);
}
[
ComVisible(false)
]
public virtual void TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, int id, string format, params object[] args) {
if (Filter != null && !Filter.ShouldTrace(eventCache, source, eventType, id, format, args))
return;
WriteHeader(source, eventType, id);
if (args != null)
WriteLine(String.Format(CultureInfo.InvariantCulture, format, args));
else
WriteLine(format);
WriteFooter(eventCache);
}
[
ComVisible(false)
]
public virtual void TraceTransfer(TraceEventCache eventCache, String source, int id, string message, Guid relatedActivityId) {
TraceEvent(eventCache, source, TraceEventType.Transfer, id, message + ", relatedActivityId=" + relatedActivityId.ToString());
}
private void WriteHeader(String source, TraceEventType eventType, int id) {
Write(String.Format(CultureInfo.InvariantCulture, "{0} {1}: {2} : ", source, eventType.ToString(), id.ToString(CultureInfo.InvariantCulture)));
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
private void WriteFooter(TraceEventCache eventCache) {
if (eventCache == null)
return;
indentLevel++;
if (IsEnabled(TraceOptions.ProcessId))
WriteLine("ProcessId=" + eventCache.ProcessId);
if (IsEnabled(TraceOptions.LogicalOperationStack)) {
Write("LogicalOperationStack=");
Stack operationStack = eventCache.LogicalOperationStack;
bool first = true;
foreach (Object obj in operationStack) {
if (!first)
Write(", ");
else
first = false;
Write(obj.ToString());
}
WriteLine(String.Empty);
}
if (IsEnabled(TraceOptions.ThreadId))
WriteLine("ThreadId=" + eventCache.ThreadId);
if (IsEnabled(TraceOptions.DateTime))
WriteLine("DateTime=" + eventCache.DateTime.ToString("o", CultureInfo.InvariantCulture));
if (IsEnabled(TraceOptions.Timestamp))
WriteLine("Timestamp=" + eventCache.Timestamp);
if (IsEnabled(TraceOptions.Callstack))
WriteLine("Callstack=" + eventCache.Callstack);
indentLevel--;
}
internal bool IsEnabled(TraceOptions opts) {
return (opts & TraceOutputOptions) != 0;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpCapabilitiesSectionHandler.cs
- EntityDataSourceContainerNameConverter.cs
- ParameterEditorUserControl.cs
- DragDeltaEventArgs.cs
- NameScope.cs
- DataColumnChangeEvent.cs
- TemplatePagerField.cs
- CompensationHandlingFilter.cs
- OleDbSchemaGuid.cs
- MetadataPropertyvalue.cs
- DBSchemaRow.cs
- PasswordTextContainer.cs
- AutomationProperties.cs
- KoreanLunisolarCalendar.cs
- ByteStreamMessageUtility.cs
- LassoSelectionBehavior.cs
- SizeAnimation.cs
- Message.cs
- XomlDesignerLoader.cs
- DotExpr.cs
- LocatorPartList.cs
- Annotation.cs
- FormViewInsertedEventArgs.cs
- AggregateNode.cs
- FilterableData.cs
- FullTextBreakpoint.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- HttpModuleAction.cs
- PropertyCondition.cs
- Rectangle.cs
- MessageLogger.cs
- ProfileServiceManager.cs
- XmlSchemaNotation.cs
- DataSourceGroupCollection.cs
- _Win32.cs
- MimeMapping.cs
- ProtocolViolationException.cs
- IDispatchConstantAttribute.cs
- VisualBasicSettingsHandler.cs
- StackOverflowException.cs
- PageOutputColor.cs
- SessionState.cs
- MsmqHostedTransportManager.cs
- ProgressBarRenderer.cs
- UTF7Encoding.cs
- SqlUtils.cs
- KeyFrames.cs
- LinkLabelLinkClickedEvent.cs
- SeparatorAutomationPeer.cs
- ADMembershipProvider.cs
- HebrewCalendar.cs
- FunctionParameter.cs
- ErrorTableItemStyle.cs
- DataContractSerializerElement.cs
- controlskin.cs
- dataobject.cs
- XmlArrayAttribute.cs
- GreenMethods.cs
- TemplateBuilder.cs
- ColumnHeaderConverter.cs
- ZipPackagePart.cs
- CollectionBuilder.cs
- PenCursorManager.cs
- CircleHotSpot.cs
- precedingsibling.cs
- TableDetailsCollection.cs
- DataSourceViewSchemaConverter.cs
- MissingMemberException.cs
- NetworkInformationException.cs
- TextCompositionManager.cs
- ContravarianceAdapter.cs
- ClientType.cs
- ToolboxItemFilterAttribute.cs
- HealthMonitoringSectionHelper.cs
- PageFunction.cs
- SessionEndingCancelEventArgs.cs
- PointIndependentAnimationStorage.cs
- DecimalAnimationUsingKeyFrames.cs
- UnSafeCharBuffer.cs
- SafeSerializationManager.cs
- MailMessageEventArgs.cs
- AudioException.cs
- AssemblyCollection.cs
- CodeTypeReferenceSerializer.cs
- FunctionQuery.cs
- ScriptResourceInfo.cs
- SortedList.cs
- X509ChainPolicy.cs
- IPEndPoint.cs
- XmlAttribute.cs
- XmlBinaryReaderSession.cs
- SQLResource.cs
- AssemblyName.cs
- PaintValueEventArgs.cs
- DrawListViewSubItemEventArgs.cs
- ProjectionCamera.cs
- ConvertersCollection.cs
- TextEffect.cs
- X509Utils.cs
- TCEAdapterGenerator.cs