我使用以下代码记录异常,但它没有将任何日志写入文件" mylistener.log "。我在这里缺少什么?
using System;
using System.Diagnostics;
namespace TraceSourceApp
{
class Program
{
private static TraceSource mySource = new TraceSource("TraceSourceApp");
static void Main(string[] args)
{
TextWriterTraceListener textListener =
new TextWriterTraceListener("myListener.log");
mySource.Listeners.Add(textListener);
int i = 10, j = 0, k;
try
{
k = i / j;
}
catch
{
mySource.TraceEvent(TraceEventType.Error, 12,
"Division by Zero");
}
mySource.Close();
}
}
}
答案 0 :(得分:2)
为了让TraceSource将数据写入文件,您需要将TraceSource的Switch - 属性设置为SourceSwitch实例。按如下方式更改您的代码:
static void Main(string[] args)
{
TextWriterTraceListener textListener = new TextWriterTraceListener("myListener.log");
// New code starts here
var sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose");
mySource.Switch = sourceSwitch;
// New code ends here
mySource.Listeners.Add(textListener);
// ...
除了让TraceWriter自动刷新其内容之外,在main方法的开头设置Trace.AutoFlush(示例在没有它的情况下工作,但确保侦听器被刷新是一个好主意为了不丢失日志条目):
static void Main(string[] args)
{
Trace.AutoFlush = true;
// ...
作为替代方案,您还可以通过在结尾处调用其Flush - 方法来显式刷新侦听器:
textListener.Flush();
mySource.Close();
在现实世界的代码中,我建议添加一个try-finally或者使用block来断言Flush被调用并且源被关闭。