我正在支持一个大型的旧应用程序.代码使用NLog以及Debug.WriteLine和Trace.WriteLine.我正在尝试将Debug.WriteLine和Trace.WriteLine重定向到Nlog文件.所以一切都在一个地方.目前,有些位于"输出"窗口中,有些位于日志文件中.
那篇文章将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");
Run Code Online (Sandbox Code Playgroud)
我已经尝试将源名称从我的应用程序更改为名称空间.没工作.我无法让自己的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>
Run Code Online (Sandbox Code Playgroud)
显式NLog调用正好记录到日志文件中:
NLog.LogManager.GetCurrentClassLogger().Trace("This Works");
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 13
您已将TraceSource配置为记录到NLog,但您的trace语句未使用该TraceSource.
尝试:
<system.diagnostics>
<trace>
<listeners>
<add name="nlog" type="NLog.NLogTraceListener, NLog" />
</listeners>
</trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
或者使用您配置的TraceSource,例如:
TraceSource source = new TraceSource("MyAppNamespace");
source.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
Run Code Online (Sandbox Code Playgroud)