如何将System.Diagnostics.Trace和System.Diagnostics.Debug消息记录到NLog文件?

时间:2013-10-03 21:01:46

标签: c# nlog

我正在支持一个大型的旧应用程序。该代码使用NLog以及Debug.WriteLineTrace.WriteLine。我正在尝试将Debug.WriteLine和Trace.WriteLine重定向到Nlog文件。所以一切都在一个地方。目前,有些是在输出窗口中,有些是在日志文件中。

I followed this article to use the NLogTraceListener

该文章将System.Net和System.Net.Sockets分流到日志文件中。我尝试了它,它的工作原理。我看到System.Net和System.Net.Sockets消息被记录到文件中。 This SO article描述了相同的内容 - 并且有效。

什么不起作用是将我自己的消息从我自己的命名空间和类记录到日志文件中。

System.Diagnostics.Debug.WriteLine("This won't end up in the log file");
System.Diagnostics.Trace.WriteLine("This won't end up in the log file");

我已尝试将源名称从我的应用程序更改为名称空间。没工作。我无法让自己的WriteLines登录到该文件。它们仍出现在Visual Studio输出窗口中。

例如:

    <system.diagnostics>
        <sources>
            <source name="MyAppNamespace" switchValue="All">
                <listeners>
                    <add name="nlog" />
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add name="nlog" type="NLog.NLogTraceListener, NLog" />
        </sharedListeners>
    </system.diagnostics>

显式NLog调用正好记录到日志文件中:

NLog.LogManager.GetCurrentClassLogger().Trace("This Works");

1 个答案:

答案 0 :(得分:13)

您已配置TraceSource以登录NLog,但您的trace语句未使用该TraceSource。

尝试:

<system.diagnostics>
    <trace>
      <listeners>
          <add name="nlog" type="NLog.NLogTraceListener, NLog" />
      </listeners>
    </trace>
</system.diagnostics>

或者使用您配置的TraceSource,例如:

TraceSource source = new TraceSource("MyAppNamespace");
source.TraceEvent(TraceEventType.Warning, 2, "File Test not found");