假设您在整个应用程序中都有C#跟踪消息。类似的东西:
Trace.TraceInformation("Service Started");
如何自动将此日志记录到nLog目标,而无需将以下代码添加到具有跟踪消息的所有类中?
using NLog;
private static Logger logger = LogManager.GetCurrentClassLogger();
有没有办法在不包含.NET Framework本身生成的跟踪的情况下执行此操作,this article演示了如何操作?
答案 0 :(得分:9)
这适用于没有明确来源
的情况 <system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="MyNLogTraceListener" type="NLog.NLogTraceListener, NLog" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
答案 1 :(得分: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>
您还需要配置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>
答案 2 :(得分:0)
您可以使用以下内容
<system.diagnostics>
<sources>
<source name="System" switchValue="All">
<listeners>
<add name="nlog" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="nlog" type="NLog.NLogTraceListener, NLog" />
</sharedListeners>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="nlog" />
<remove name="Default" />
</listeners>
</trace>