【问题标题】:can't write into log file using TraceSource Method in C#无法使用 C# 中的 TraceSource 方法写入日志文件
【发布时间】:2014-01-25 06:01:08
【问题描述】:

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

【问题讨论】:

  • 你定义了编译时常量 TRACE 吗?

标签: c# trace


【解决方案1】:

为了让 TraceSource 将数据写入文件,您需要将 TraceSource 的 Switch-property 设置为 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 或 using 块来断言 Flush 被调用并且源被关闭。

【讨论】:

  • 在我写完 Trace.AutoFlush = true;行,它不存储 traceevent 输出。 textListener.Flush() 获得相同的结果
  • @Gomathipriya:是的,你是对的,原因是缺少 Switch。我已经更新了示例。
  • @Gomathipriya:Switch 负责决定是否应将特定事件写入源。我只能推测为什么没有写入所有内容的默认 Switch。
猜你喜欢
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多