了解C#中Trace的工作原理

11

我试图了解追踪(Tracing)是如何工作的。

我创建了一个简单的新 Web 项目。这是我正在使用的代码:

// Create a trace listener for the event log.
EventLogTraceListener myTraceListener = new EventLogTraceListener("myEventLogSource");

// Add the event log trace listener to the collection.
Trace.Listeners.Add(myTraceListener);

// Write output to the event log.
Trace.WriteLine("Test output");

我正在参考这个msdn链接获取帮助。

我的web.config中的设置如下:

 <system.diagnostics>
 <trace autoflush="false" indentsize="4">
  <listeners>
    <add name="myListener"
      type="System.Diagnostics.EventLogTraceListener"
      initializeData="TraceListenerLog" />
  </listeners>
 </trace>
</system.diagnostics>

然而,当我运行这段代码时,我不知道这个日志记录发生在哪里。我检查了事件查看器,在“应用程序和服务日志”下,我期望会有一个名为“myEventLogSource”的新日志被创建,但这并没有发生。

请问有人能够解释一下这是如何工作的吗?


请问当您将配置中的autoflush更改为true时会发生什么?或者是Trace类的AutoFlush属性。另外,写入后也可以调用Flush。此外,XML配置可避免您需要在代码中创建/配置侦听器。 - Adam Houldsworth
创建新的事件日志源需要管理员权限。首先在管理员命令提示符中运行此命令 eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO myEventLogSource /D "Created myEventLogSource" - adrianm
1个回答

7

在应用程序日志中检查是否有两个源同时写入了应用程序日志,一个是TraceListenerLog,另一个是myEventLogSource。新的日志不会被创建,它们都将使用应用程序日志。 如果您想创建一个新的日志并将跟踪输出写入其中,可以按照以下方式操作(当然,日志名称不必等于源名称):

        string logSource = "_myEventLogSource";
        if (!EventLog.SourceExists(logSource))
            EventLog.CreateEventSource(logSource, logSource);

        EventLogTraceListener myTraceListener = new EventLogTraceListener(logSource);

        // Add the event log trace listener to the collection.
        System.Diagnostics.Trace.Listeners.Add(myTraceListener);

        // Write output to the event log.
        System.Diagnostics.Trace.WriteLine("Test output");

即使源代码不存在,追踪信息也会被写入应用程序日志中,这个日志的源名称是您在EventLogTraceListener构造函数中传递的名称。

我会尝试这个,但如果事件源不存在,那么这个问题中的代码会抛出错误吗? - Yasser Shaikh
它将检查源是否存在(EventLog.SourceExists(logName)),如果不存在,则会创建它(EventLog.CreateEventSource(logName, logName))。您可以尝试将此代码放入Web应用程序中,例如Page_Load事件处理程序。运行后,再次打开事件查看器以获取已存在日志的刷新列表。 - Ivan Golović
1
即使源不存在,跟踪信息也会被写入事件日志中的应用程序日志下,该源名称是您传递给EventLogTraceListener构造函数的名称。 - Ivan Golović

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接