代码之家  ›  专栏  ›  技术社区  ›  Simon Randy Burden

有没有扩展system.diagnostics.trace的库?

  •  4
  • Simon Randy Burden  · 技术社区  · 14 年前

    有没有好的库可以扩展system.diagnostics.trace?

    我正在寻找的一些功能。

    • 轧制原木
    • SMTP

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

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

    5 回复  |  直到 12 年前
        1
  •  1
  •   to StackOverflow    14 年前

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

    然而,事实上System.Diagnostics.Trace并不像其他日志框架(如entlib和log4net)那样灵活。

    我所做的工作是开发一个受log4net强烈影响的内部API,它使用提供者模型设计模式在任何合适的日志框架上提供一个瘦包装器。我有system.diagnostics.trace、log4net和entlib的提供者。基本概念与 The Common Infrastructure for .NET 日志记录库。

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

    当然,您可以通过坚持System.Diagnostics.Trace并为SMTP编写自己的跟踪侦听器来实现您想要的目标。( See this CodeProject sample )或是滚动的原木。或者编写自己的traceListener,将其重定向到日志框架(如log4net),这样您就可以访问该框架支持的日志记录器。

        2
  •  3
  •   wageoghe    14 年前

    您也可以查看UKADC.diagnostics here

    它包含几个跟踪侦听器。更有趣的是,它增加了使用格式化语句的能力(比如log4net和nlog支持什么)。因此,您对日志文件的布局有更多的控制,包括记录哪些字段、字段的顺序、至少部分字段的格式(如数据/时间格式)。甚至可以编写自己的“令牌”,然后在格式化语句中引用它们。它不支持几乎与log4net或nlog相同的格式选项,也不支持几乎相同数量的跟踪侦听器,但对于基于System.Diagnostics的解决方案,它是从System.Diagnostics中提供的“开箱即用”功能中真正提高的。

        3
  •  2
  •   Tim Jarvis    14 年前

    这不算是一个库,但我曾经写过一次文本框侦听器,这样我就可以将文本框放到表单上,然后自动获取跟踪输出….

      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);
          }
        }
      }
    
        4
  •  2
  •   mcintyre321    12 年前

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

        5
  •  1
  •   John Saunders Andrey Morozov    14 年前

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