自动将System.diagnostics.trace消息记录到Nlog目标

Sol*_*pod 10 c# trace system.diagnostics nlog

假设您在整个应用程序中都有C#跟踪消息.就像是:

Trace.TraceInformation("Service Started"); 
Run Code Online (Sandbox Code Playgroud)

如何自动将此日志记录到nLog目标,而无需向具有跟踪消息的所有类添加如下代码?

using NLog;
private static Logger logger = LogManager.GetCurrentClassLogger();
Run Code Online (Sandbox Code Playgroud)

有没有办法在不包含.NET Framework本身生成的跟踪的情况下执行此操作,本文将演示如何执行操作?

fia*_*iat 9

这适用于没有明确来源的情况

  <system.diagnostics>
      <trace autoflush="true" indentsize="4">
        <listeners>
          <add name="MyNLogTraceListener" type="NLog.NLogTraceListener, NLog" />
          <remove name="Default" />
        </listeners>
      </trace>
  </system.diagnostics>
Run Code Online (Sandbox Code Playgroud)


wag*_*ghe 6

您可以使用NLog的NLogTraceListener.

为了完整性,这里是System.Diagnostics配置(来自上面的链接)来指定NLogTraceListener:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net" switchValue="All">
        <listeners>
          <add name="nlog" />
        </listeners>
      </source>
      <source name="System.Net.Sockets" switchValue="All">
        <listeners>
          <add name="nlog" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="nlog" type="NLog.NLogTraceListener, NLog" />
    </sharedListeners>
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

您还需要配置NLog,告诉它在从System.Diagnostics.Trace移动到NLog后如何编写信息:

<nlog>
  <targets>
    <target name="console" type="ColoredConsole" layout="${longdate} ${windows-identity} ${message}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="console" />
  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)