.Net自定义跟踪文件名

时间:2009-10-21 20:38:31

标签: .net vb.net tracing

我希望我的应用程序写出名为MachineName_UserName_yyyymmdd_hhmmss.txt的不同跟踪文件,其中用户名是当前登录的用户,时间是应用程序的开始时间。 .Net侦听器TextWriterTraceListener似乎只支持配置文件中指定的硬编码文件名。有没有办法在不编写自定义跟踪侦听器的情况下执行此操作。

假设我必须编写一个自定义跟踪侦听器,我已经实现了一个这样的tracelistener:

Imports System.Diagnostics

Public Class MyCustomTraceListener
    Inherits TextWriterTraceListener

    Public Sub New()
        'Need to do it this way as the Base constructor call has to be the first statement
        MyBase.New(String.Format("AppNameTraceFile_{0}_{1}_{2}{3}{4}-{5}{6}{7}.txt", _
                                                       Environment.MachineName, _
                                                       Environment.UserName, _
                                                       DateTime.Now.ToString("yyyy"), _
                                                       DateTime.Now.ToString("MM"), _
                                                       DateTime.Now.ToString("dd"), _
                                                       DateTime.Now.ToString("HH"), _
                                                       DateTime.Now.ToString("mm"), _
                                                       DateTime.Now.ToString("ss")))
        Me.IndentSize = 4
    End Sub

End Class

在配置文件中,我已经像这样配置了跟踪源:

  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="MyTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="MyTraceListener"
            type="MyNameSpace.MyCustomTraceListener"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Warning" />
    </switches>
  </system.diagnostics>

我正在创建跟踪源:

Dim tsTraceSource As TraceSource = New TraceSource("MyTraceSource")
tsTraceSource.TraceEvent(TraceEventType.Warning, 0, "warning message")

然而,在启动时,我一直收到一条错误,指出找不到“MyNameSpace.MycustomTraceListener”类型。

有谁看到这里的问题是什么?

感谢。

4 个答案:

答案 0 :(得分:1)

您是否需要通知您的类型装配?

<add name="MyTraceListener"
     type="MyNameSpace.MyCustomTraceListener, MyAssembly"
     traceOutputOptions="ProcessId, DateTime, Callstack" />

答案 1 :(得分:0)

另一种完全避免使用派生类的方法:

在config xml中创建一个基类TextWriterTraceListener,然后在启动时,您可以枚举Listeners集合以找到它(通常会有DefaultTraceListener和TextWriterTraceListener),然后只需将其日志流设置为新流。

答案 2 :(得分:0)

如何在代码中设置TraceListener?如果您仍想要某些参数,例如日志路径,位于app.config中,在appSettings部分定义它们,并在创建监听器时读取它们。

' VB
Dim traceLog As New FileStream(traceFile, FileMode.OpenOrCreate)
Dim traceListener As New TextWriterTraceListener(traceLog)
Trace.Listeners.Add(traceListener)

// C#
FileStream traceLog = new FileStream(traceFile, FileMode.OpenOrCreate);
TextWriterTraceListener traceListener = new TextWriterTraceListener(traceLog);
Trace.Listeners.Add(traceListener);

配置中的每个元素都对应API,因此您将能够完成所需的一切。

traceListener.TraceOutputOptions |= TraceOptions.Callstack | TraceOptions.DateTime | TraceOptions.ProcessId;

答案 3 :(得分:0)

很小的帖子,但万一遇到有人遇到 - 这里有一个链接,详细说明了如何设置一个带有日期和时间的滚动平面文件跟踪监听器:http://msdn.microsoft.com/en-us/library/ff664768%28v=pandp.50%29.aspx

关于记录应用程序阻止的父文章位于http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx

您可能需要在Visual Studio中添加名为企业库 - 记录应用程序阻止

nuget包

如果您想深入了解Enterprise Library的Logging Application Block,请参阅以下整本PDF书:http://www.microsoft.com/en-us/download/details.aspx?id=41145