TraceSwitch Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Provides a multilevel switch to control tracing and debug output without recompiling your code.
public ref class TraceSwitch : System::Diagnostics::Switch
public class TraceSwitch : System.Diagnostics.Switch
type TraceSwitch = class
inherit Switch
Public Class TraceSwitch
Inherits Switch
- Inheritance
Examples
The following code example creates a new TraceSwitch and uses the switch to determine whether to print error messages. The switch is created at the class level. MyMethod
writes the first error message if the Level property is set to TraceLevel.Error or higher. However, MyMethod
does not write the second error message if the Level is less than TraceLevel.Verbose.
// Class-level declaration.
/* Create a TraceSwitch to use in the entire application.*/
private:
static TraceSwitch^ mySwitch = gcnew TraceSwitch( "General", "Entire Application" );
public:
static void MyMethod()
{
// Write the message if the TraceSwitch level is set to Error or higher.
if ( mySwitch->TraceError )
Console::WriteLine( "My error message." );
// Write the message if the TraceSwitch level is set to Verbose.
if ( mySwitch->TraceVerbose )
Console::WriteLine( "My second error message." );
}
static void main()
{
// Run the method that prints error messages based on the switch level.
MyMethod();
}
//Class-level declaration.
/* Create a TraceSwitch to use in the entire application.*/
static TraceSwitch mySwitch = new TraceSwitch("General", "Entire Application");
static public void MyMethod()
{
// Write the message if the TraceSwitch level is set to Error or higher.
if (mySwitch.TraceError)
Console.WriteLine("My error message.");
// Write the message if the TraceSwitch level is set to Verbose.
if (mySwitch.TraceVerbose)
Console.WriteLine("My second error message.");
}
public static void Main(string[] args)
{
// Run the method that prints error messages based on the switch level.
MyMethod();
}
' Class-level declaration.
' Create a TraceSwitch to use in the entire application.
Private Shared mySwitch As New TraceSwitch("General", "Entire Application")
Public Shared Sub MyMethod()
' Write the message if the TraceSwitch level is set to Error or higher.
If mySwitch.TraceError Then
Console.WriteLine("My error message.")
End If
' Write the message if the TraceSwitch level is set to Verbose.
If mySwitch.TraceVerbose Then
Console.WriteLine("My second error message.")
End If
End Sub
Public Shared Sub Main()
' Run the method that prints error messages based on the switch level.
MyMethod()
End Sub
Remarks
You can use a trace switch to filter out messages based on their importance. The TraceSwitch class provides the TraceError, TraceWarning, TraceInfo, and TraceVerbose properties to test the level of the switch. The Level property gets or sets the switch's TraceLevel.
You can create a TraceSwitch in your code and set the level directly to instrument a specific section of code.
In .NET Framework apps only, you can also set the level of a TraceSwitch through the application configuration file and then use the configured TraceSwitch level in your application. In the application configuration file, you can add or remove a switch, set a switch's value, or clear all the switches previously set by the application. The configuration file should be formatted like the following example:
<configuration>
<system.diagnostics>
<switches>
<add name="mySwitch" value="1" />
</switches>
</system.diagnostics>
</configuration>
This configuration section defines a TraceSwitch with the DisplayName set to mySwitch
, and the Level set to 1, which corresponds to the enumeration value TraceLevel.Error.
Note
You can also use text to specify the value for a switch. For example, true
for a BooleanSwitch, or the text representing an enumeration value, such as Error
for a TraceSwitch. The line <add name="mySwitch" value="Error" />
is equivalent to <add name="mySwitch" value="1" />
.
In your application, you can use the configured switch level by creating a TraceSwitch with the same name, as shown in the following example:
private:
static TraceSwitch^ appSwitch = gcnew TraceSwitch("mySwitch",
"Switch in config file");
public:
static void Main(array<String^>^ args)
{
//...
Console::WriteLine("Trace switch {0} configured as {1}",
appSwitch->DisplayName, appSwitch->Level.ToString());
if (appSwitch->TraceError)
{
//...
}
}
private static TraceSwitch appSwitch = new TraceSwitch("mySwitch",
"Switch in config file");
public static void Main(string[] args)
{
//...
Console.WriteLine("Trace switch {0} configured as {1}",
appSwitch.DisplayName, appSwitch.Level.ToString());
if (appSwitch.TraceError)
{
//...
}
}
Private Shared appSwitch As new TraceSwitch("mySwitch", _
"Switch in config file")
Public Shared Sub Main(args As String())
'...
Console.WriteLine("Trace switch {0} configured as {1}",
appSwitch.DisplayName, appSwitch.Level.ToString())
If appSwitch.TraceError = True Then
'...
End If
End Sub
In .NET Core and .NET 5+ apps, the Level of the new switch defaults to TraceLevel.Off.
In .NET Framework apps, the switch Level property defaults to the value specified in the configuration file. If the TraceSwitch constructor cannot find initial switch settings in the configuration file, Level of the new switch defaults to TraceLevel.Off.
You must enable tracing or debugging to use a switch. The following syntax is compiler specific. If you use compilers other than C# or Visual Basic, refer to the documentation for your compiler.
To enable debugging in C#, add the
/d:DEBUG
flag to the compiler command line when you compile your code, or add#define DEBUG
to the top of your file. In Visual Basic, add the/d:DEBUG=True
flag to the compiler command line.To enable tracing in C#, add the
/d:TRACE
flag to the compiler command line when you compile your code, or add#define TRACE
to the top of your file. In Visual Basic, add the/d:TRACE=True
flag to the compiler command line.
Note
These debug and trace compiler switches are not required when using the TraceSwitch class in isolation. They are only required in conjunction with Trace or Debug methods that are conditionally compiled.
For more information on instrumenting your application, see Debug and Trace. For more information about configuring and using trace switches, see Trace Switches.
Note
To improve performance, you can make TraceSwitch members static
in your class.
Constructors
TraceSwitch(String, String) |
Initializes a new instance of the TraceSwitch class, using the specified display name and description. |
TraceSwitch(String, String, String) |
Initializes a new instance of the TraceSwitch class, using the specified display name, description, and default value for the switch. |
Properties
Attributes |
Gets the custom switch attributes defined in the application configuration file. (Inherited from Switch) |
DefaultValue |
Gets the default value assigned in the constructor. (Inherited from Switch) |
Description |
Gets a description of the switch. (Inherited from Switch) |
DisplayName |
Gets a name used to identify the switch. (Inherited from Switch) |
Level |
Gets or sets the trace level that determines the messages the switch allows. |
SwitchSetting |
Gets or sets the current setting for this switch. (Inherited from Switch) |
TraceError |
Gets a value indicating whether the switch allows error-handling messages. |
TraceInfo |
Gets a value indicating whether the switch allows informational messages. |
TraceVerbose |
Gets a value indicating whether the switch allows all messages. |
TraceWarning |
Gets a value indicating whether the switch allows warning messages. |
Value |
Gets or sets the value of the switch. (Inherited from Switch) |
Methods
Equals(Object) |
Determines whether the specified object is equal to the current object. (Inherited from Object) |
GetHashCode() |
Serves as the default hash function. (Inherited from Object) |
GetSupportedAttributes() |
Gets the custom attributes supported by the switch. (Inherited from Switch) |
GetType() |
Gets the Type of the current instance. (Inherited from Object) |
MemberwiseClone() |
Creates a shallow copy of the current Object. (Inherited from Object) |
OnSwitchSettingChanged() |
Updates and corrects the level for this switch. |
OnValueChanged() |
Sets the SwitchSetting property to the integer equivalent of the Value property. |
OnValueChanged() |
Invoked when the Value property is changed. (Inherited from Switch) |
Refresh() |
Refreshes the trace configuration data. (Inherited from Switch) |
ToString() |
Returns a string that represents the current object. (Inherited from Object) |