Jak*_*ade 18 .net c# vb.net configuration trace
我正在尝试使用System.Diagnostics做一些非常基本的日志记录.我想我会使用框中的内容,而不是像Log4Net或EntLib那样使用额外的依赖.
我已经全部成立,跟踪工作非常好.代码段:
Trace.TraceInformation("Hello World")
Run Code Online (Sandbox Code Playgroud)
App.config中:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" traceOutputOptions="DateTime" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)
而我的小"Hello World"在我的Trace.log文件中显示得很好.但现在我想关闭跟踪,所以我深入了解MSDN并找到如何:配置跟踪开关
.我添加了<switches>
元素,现在我的app.config看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" traceOutputOptions="DateTime" />
<remove name="Default" />
</listeners>
</trace>
<switches>
<add name="Data" value="0" />
</switches>
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)
本value="0"
应关闭跟踪-至少如果你然后按照如何:创建和初始化跟踪开关,它告诉您添加这行代码:
Dim dataSwitch As New BooleanSwitch("Data", "DataAccess module")
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义:我只需要BooleanSwicth
通过.config文件声明一个能够管理(禁用)跟踪的实例?我应该...在某处使用 ......对象?
无论如何,我确定我错过了一些非常明显的东西.请帮忙.
如何在app.config中关闭跟踪?
wag*_*ghe 34
我同意@Alex Humphrey建议尝试使用TraceSources.使用TraceSources,您可以更好地控制日志记录/跟踪语句的执行方式.例如,您可以使用以下代码:
public class MyClass1
{
private static readonly TraceSource ts = new TraceSource("MyClass1");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
public class MyClass2
{
private static readonly TraceSource ts = new TraceSource("MyClass2");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
Run Code Online (Sandbox Code Playgroud)
TraceSource.TraceEvent调用将根据关联的Switch的配置级别自动检查消息级别(TraceEventType.Information),并确定是否应该实际写出消息.
通过为每种类型使用不同名称的TraceSource,您可以单独控制这些类的日志记录.您可以启用MyClass1日志记录,也可以禁用它,或者您可以启用它,但只有在消息级别(TraceEventType)大于某个值(可能只记录"警告"和更高级别)时才进行日志记录.同时,您可以打开或关闭MyClass2中的日志记录或设置为一个级别,完全独立于MyClass1.所有这些启用/禁用/级别的东西都发生在app.config文件中.
使用app.config文件,您还可以以相同的方式控制所有TraceSource(或TraceSources组).因此,您可以进行配置,以便MyClass1和MyClass2都由同一个Switch控制.
如果您不希望每种类型都有不同名称的TraceSource,则可以在每个类中创建相同的TraceSource:
public class MyClass1
{
private static readonly TraceSource ts = new TraceSource("MyApplication");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
public class MyClass2
{
private static readonly TraceSource ts = new TraceSource("MyApplication");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以使应用程序中的所有日志记录发生在同一级别(或关闭或使用相同的TraceListener,或其他任何方式).
您还可以将应用程序的不同部分配置为可独立配置,而无需在每种类型中定义唯一TraceSource的"麻烦":
public class Analysis1
{
private static readonly TraceSource ts = new TraceSource("MyApplication.Analysis");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
public class Analysis2
{
private static readonly TraceSource ts = new TraceSource("MyApplication.Analysis");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
public class DataAccess1
{
private static readonly TraceSource ts = new TraceSource("MyApplication.DataAccess");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
public class DataAccess2
{
private static readonly TraceSource ts = new TraceSource("MyApplication.DataAccess");
public DoSomething(int x)
{
ts.TraceEvent(TraceEventType.Information, "In DoSomething. x = {0}", x);
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式对您的课程进行检测,您可以将应用程序日志中的"DataAccess"部分设置为一个级别,而应用程序的"分析"部分则在不同级别进行记录(当然,可以配置应用程序的任一部分或两个部分)以便禁用日志记录).
以下是配置TraceSources和TraceSwitches的app.config文件的一部分:
<system.diagnostics>
<trace autoflush="true"></trace>
<sources>
<source name="MyClass1" switchName="switch1">
<listeners>
<remove name="Default"></remove>
<add name="console"></add>
</listeners>
</source>
<source name="MyClass2" switchName="switch2">
<listeners>
<remove name="Default"></remove>
<add name="console"></add>
</listeners>
</source>
</sources>
<switches>
<add name="switch1" value="Information"/>
<add name="switch2" value="Warning"/>
</switches>
<sharedListeners>
<add name="console"
type="System.Diagnostics.ConsoleTraceListener">
</add>
<add name="file"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.txt">
</add>
</sharedListeners>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以配置单个TraceSource和单个Switch,并且所有日志记录都可以通过单一级别的控制进行(即您可以关闭所有日志记录或使其在特定级别进行日志记录).
或者,您可以定义多个TraceSource(并在代码中引用相应的TraceSource)和多个Switch.可以共享交换机(即,多个TraceSource可以使用相同的交换机).
最后,通过现在花费更多努力来使用TraceSources并在代码中引用适当命名的TraceSources(即逻辑定义TraceSource名称以便您可以对应用程序中的日志记录进行所需程度的控制),您将获得显着的收益从长远来看具有灵活性.
以下是一些可能会帮助您使用System.Diagnostics的链接:
.Net TraceSource/TraceListener框架是否具有与log4net的Formatters类似的东西?
在我发布的链接中,经常讨论"最佳"日志框架.我并不想说服您从System.Diagnostics更改.链接也往往有关于使用System.Diagnostics的良好信息,这就是我发布它们的原因.
我发布的一些链接包含指向Ukadc.Diagnostics的链接.这是System.Diagnostics的一个非常酷的库添加库,它增加了丰富的格式化功能,类似于你可以用log4net和NLog做的.此库对您的应用程序施加仅配置依赖项,而不是代码或引用依赖项.
归档时间: |
|
查看次数: |
29582 次 |
最近记录: |