【问题标题】:How to use custom trace listener to log traces in .net如何使用自定义跟踪侦听器在 .net 中记录跟踪
【发布时间】:2016-05-12 01:28:26
【问题描述】:

我遇到了这个链接http://www.codeproject.com/Articles/447238/Advanced-Tracing#_comments。作者在创建记录到数据库的自定义侦听器方面做得非常好。在研究更多关于跟踪/日志记录时,我读到(从这里https://blogs.msdn.microsoft.com/bclteam/2005/09/20/a-tracing-primer-part-ii-b-mike-rousos/)跟踪源在需要通过侦听器进行跟踪时调用以下方法。

    void TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, int id)
    void TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, int id, string message)
    void TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, int id, string format, params object[] args)
    void TraceData(TraceEventCache eventCache, String source, TraceEventType eventType, int id, object data)
    void TraceData(TraceEventCache eventCache, String source, TraceEventType eventType, int id, params object[] data)
    void TraceTransfer(TraceEventCache eventCache, String source, int id, string message, Guid relatedActivityId)

几乎所有这些方法(除了 1 或 2)都已被覆盖(它们都是公共的,只有 TraceTransfer 调用 WriteLine 方法,因为 msdn 博客说这些 TraceEvent/Data/Transfer 方法在内部调用 Write/WriteLine方法)由自定义跟踪侦听器的作者(在 codeproject.com 的第一个链接中)。我想测试这个自定义侦听器以查看它的行为方式。但在现实生活中,我不知道跟踪源如何调用那些 TraceEvent(具有多个重载)和 TraceTransfer() 方法来跟踪自定义侦听器。虽然我知道我可以创建一个跟踪源实例

TraceSource ts = new TraceSource("myApp");
ts.Listeners.Add(new DBTraceListener);

并向其添加自定义侦听器(如上面的代码),但问题仍然在于如何跟踪源调用 TraceEvent/TraceTransfer 方法(用 DBTraceListener 编写)来跟踪自定义侦听器。

换句话说,我不知道如何在我的应用程序中使用此自定义侦听器来记录跟踪。任何帮助将不胜感激。

【问题讨论】:

    标签: c# .net logging trace


    【解决方案1】:

    添加跟踪侦听器的一种简单方法是使用Trace.Listeners.Add()。例如,添加TextWriterTraceListener

    var listener = new TextWriterTraceListener("e:\\blah.txt");
    Trace.Listeners.Add(listener);
    Trace.AutoFlush = true;
    Trace.WriteLine("Test!");
    

    【讨论】:

    • 这不是我要找的。我的问题是trasource如何调用监听类的tarceevent/tracetransfer方法。
    • 您进行的任何跟踪调用都应该转到所有附加的侦听器。添加 DBTraceListener 后,您可以尝试 Trace.TraceError()、Trace.TraceWarning() 等。我认为 Trace 类会在内部调用 TraceEvent、TraceData 和 TraceTransfer 方法。
    • 嗯,这就是我在阅读 MSDN 博客时所理解的(我的问题中提供了上面的链接),但仍然不确定 TraceSource 实例如何在侦听器上调用这些内部方法。
    • 如果有经验的用户提供更多的意见,我们将不胜感激。
    • 这个关于如何使用 TraceSources 的链接可能是您正在寻找的。 msdn.microsoft.com/en-us/library/ms228993(v=vs.110).aspx 也可以查看 TraceSource 源代码here。您可以看到 TraceEvent 方法遍历每个 TraceListener,调用相应的 TraceEvent 事件。希望这更接近您正在寻找的内容。
    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多