7

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

我按照这篇文章使用 NLogTraceListener

那篇文章有 System.Net 和 System.Net.Sockets 被分流到日志文件。我试过了,它有效。我看到 System.Net 和 System.Net.Sockets 消息被记录到文件中。 这篇 SO 文章描述了相同的内容——并且它有效。

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

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");
4

1 回答 1

16

您已将TraceSource配置为记录到 NLog,但您的跟踪语句未使用该 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");
于 2013-10-03T21:08:34.610 回答