gpt4 book ai didi

c# - 无法使用 C# 中的 TraceSource 方法写入日志文件

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:14 24 4
gpt4 key购买 nike

我正在使用以下代码记录异常,但它没有将任何日志写入文件“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();
}
}
}

最佳答案

为了让 TraceSource 将数据写入文件,您需要设置 Switch -TraceSource 的属性为 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 自动刷新其内容外,设置 Trace.AutoFlush在 main 方法的开头(示例在没有它的情况下工作,但确保刷新监听器以免丢失日志条目始终是个好主意):

static void Main(string[] args)
{
Trace.AutoFlush = true;
// ...

作为替代方案,您还可以通过调用其 Flush 显式刷新监听器-方法在最后:

textListener.Flush();
mySource.Close();

在实际代码中,我建议添加一个 try-finally 或 using block 来断言调用了 Flush 并且关闭了源。

关于c# - 无法使用 C# 中的 TraceSource 方法写入日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21347295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com