如何在应用程序代码中使用跟踪源?

时间:2019-02-08 09:12:51

标签: c# .net logging

我已成功配置登录到应用程序的App.config文件中。相关部分如下。

<system.diagnostics>
  <sources>
    <source name="System.Net.Http">
      <listeners>
        <add name="PushTraceListener" />
      </listeners>
    </source>
  </sources>
  <switches>
    <add name="System.Net.Http" value="Verbose"/>
  </switches>
  <sharedListeners>
    <add name="PushTraceListener"
         type="PushCore.Logging.LoggingTraceListener, PushCore" />
  </sharedListeners>
</system.diagnostics>
<system.serviceModel>
  <diagnostics>
    <messageLogging logEntireMessage="true"
                    logMalformedMessages="false"
                    logMessagesAtServiceLevel="true"
                    logMessagesAtTransportLevel="true"
                    maxMessagesToLog="3000"
                    maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>

虽然可以正常工作,但我似乎无法在应用程序代码中执行相同的操作,如下所示。

var LoggingTraceListener = new LoggingTraceListener
{ Name = "PushTraceListener", Filter = new LoggingTraceFilter() };
Trace.AutoFlush = true;                      
var TraceSourceNames = new string[] { "System.Net.Http" };

foreach (var TraceSourceName in TraceSourceNames)
{
    var TraceSource = new TraceSource(TraceSourceName, SourceLevels.Verbose);
    TraceSource.Switch = new SourceSwitch(TraceSourceName, "Verbose");
    TraceSource.Listeners.Add(LoggingTraceListener);
}

Trace.Listeners.Add(LoggingTraceListener);

TraceListener本身看起来像预期的那样,因为它接收到通过Trace编写的消息,但显然不是来自实例化的TraceSource实例。我以某种方式认为,TraceSource的实例化在这里是不希望的,但是必须使用现有的跟踪源。但是,我不知道该怎么做。

首先可以实现loggig吗?如果可以,怎么办?

一个合理的问题是,如果配置可以正常运行,为什么我想用代码而不是使用App.config进行访问。原因是App.config仅可用于实际应用程序,而不能用于Windows服务。

有什么建议吗?

0 个答案:

没有答案