//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ /* */ namespace System.Diagnostics { using System; using System.ComponentModel; using System.Security; using System.Security.Permissions; /// /// Provides a multi-level switch to enable or disable tracing /// and debug output for a compiled application or framework. /// [SwitchLevel(typeof(TraceLevel))] public class TraceSwitch : Switch { /// /// Initializes a new instance of the class. /// public TraceSwitch(string displayName, string description) : base(displayName, description) { } public TraceSwitch(string displayName, string description, string defaultSwitchValue) : base(displayName, description, defaultSwitchValue) { } /// /// Gets or sets the trace /// level that specifies what messages to output for tracing and debugging. /// public TraceLevel Level { get { return (TraceLevel)SwitchSetting; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] set { if (value < TraceLevel.Off || value > TraceLevel.Verbose) throw new ArgumentException(SR.GetString(SR.TraceSwitchInvalidLevel)); SwitchSetting = (int)value; } } /// /// Gets a value /// indicating whether the is set to /// , , , or /// . /// public bool TraceError { get { return (Level >= TraceLevel.Error); } } /// /// Gets a value /// indicating whether the is set to /// , , or . /// public bool TraceWarning { get { return (Level >= TraceLevel.Warning); } } /// /// Gets a value /// indicating whether the is set to /// or . /// public bool TraceInfo { get { return (Level >= TraceLevel.Info); } } /// /// Gets a value /// indicating whether the is set to /// . /// public bool TraceVerbose { get { return (Level == TraceLevel.Verbose); } } /// /// /// Update the level for this switch. /// /// protected override void OnSwitchSettingChanged() { int level = SwitchSetting; if (level < (int)TraceLevel.Off) { Trace.WriteLine(SR.GetString(SR.TraceSwitchLevelTooLow, DisplayName)); SwitchSetting = (int)TraceLevel.Off; } else if (level > (int)TraceLevel.Verbose) { Trace.WriteLine(SR.GetString(SR.TraceSwitchLevelTooHigh, DisplayName)); SwitchSetting = (int)TraceLevel.Verbose; } } protected override void OnValueChanged() { SwitchSetting = (int) Enum.Parse(typeof(TraceLevel), Value, true); } } }