那些扩展System.Diagnostics.Trace的库?

时间:2010-05-11 05:25:16

标签: .net trace system.diagnostics

那里有任何扩展System.Diagnostics.Trace的好库吗?

我正在寻找的一些功能。

  • 滚动日志
  • SMTP

并且“使用log4net”不是答案。原因是我不想引用任何第三方程序集。

回应评论: 因为使用跟踪不会污染业务代码。我只打电话给Trace.XXX。使用Trace的扩展可以在配置或启动时的少量代码中完成。如果我使用log4net,则需要在任何地方引用它。

5 个答案:

答案 0 :(得分:3)

您还可以查看Ukadc.Diagnostics here

它包含几个TraceListeners。更有趣的是,它增加了使用格式化语句的能力(比如log4net和NLog支持)。因此,您可以更好地控制日志文件的布局,包括记录哪些字段,字段的排序,至少某些字段的格式化(如数据/时间格式)。您甚至可以编写自己的“标记”,然后在格式化语句中引用它们。它不支持几乎与log4net或NLog一样多的格式化选项,也不支持几乎TraceListeners的数量,但是,对于基于System.Diagnostics的解决方案,它是一个真正的“开箱即用”功能可在System.Diagnostics中找到。

答案 1 :(得分:2)

这不算数库,但我写了一个文本框监听器,这样我就可以在表单上删除文本框,并自动获取跟踪输出....

  public class TraceLogTextBox : RichTextBox
  {
    private TraceListener listener;

    public TraceLogTextBox()
      : base()
    {
      listener = new TextBoxTraceListener(this);
      Trace.Listeners.Add(listener);
    }

    protected override void Dispose(bool disposing)
    {
      Trace.Listeners.Remove(listener);
      base.Dispose(disposing);
    }

  }

  public class TextBoxTraceListener : TraceListener
  {
    private RichTextBox txtBox;
    const string ERROR = "error";

    public TextBoxTraceListener(RichTextBox tbox)
      : base()
    {
      txtBox = tbox;
    }

    public override void Write(object o)
    {
      if (o is Exception)
      {
        Write(o.ToString(), ERROR);
      }
      else
      {
        Write(o.ToString());
      }
    }

    public override void Write(string message)
    {
      Write(message, string.Empty);
    }

    public override void Write(string message, string category)
    {
      Color col = category.ToLower() == ERROR ? Color.Red : Color.Black;
      txtBox.SelectionColor = col;
      if (category == string.Empty)
      {
        txtBox.SelectedText = message;
      }
      else
      {
        txtBox.SelectedText = string.Format("[{0}] {1}", category, message);
      }
    }

    public override void WriteLine(string message)
    {
      WriteLine(message, string.Empty);
    }

    public override void WriteLine(object o)
    {
      if (o is Exception)
      {
        WriteLine(o.ToString(), ERROR);
      }
      else
      {
        WriteLine(o.ToString());
      }
    }

    public override void WriteLine(string message, string category)
    {
      Color col = category.ToLower() == ERROR ? Color.Red : Color.Black;
      txtBox.SelectionColor = col;
      if (category == string.Empty)
      {
        txtBox.SelectedText = string.Format("{0}\n",message);
      }
      else
      {
        txtBox.SelectedText = string.Format("[{0}] {1}\n", category, message);
      }
    }
  }

答案 2 :(得分:2)

http://essentialdiagnostics.codeplex.com/提供默认跟踪的扩展

答案 3 :(得分:1)

企业库日志记录应用程序块“扩展”System.Diagnostics.TraceSource等类。

答案 4 :(得分:1)

我理解为什么您不希望依赖第三方API来污染您的业务代码。

然而,事实上System.Diagnostics.Trace不像其他日志框架(如EntLib和Log4Net)提供的那样灵活。

我所做的是开发了一个受log4net强烈影响的内部API,它使用提供者模型设计模式为任何合适的日志框架提供一个瘦包装器。我有System.Diagnostics.Trace,log4net和EntLib的提供程序。基本概念与The Common Infrastructure for .NET日志库非常相似。

通过这种方式,您的业务代码只依赖于您自己的内部API,并且可以在运行时使用配置选择日志记录框架。

当然,您可以通过坚持使用System.Diagnostics.Trace并为SMTP编写自己的TraceListeners(See this CodeProject sample)或滚动日志来实现您的目标。或者编写自己的TraceListener,重定向到日志框架,如Log4Net,然后可以访问该框架支持的记录器。