跟踪与日志记录以及log4net如何适应?

Xer*_*erx 49 .net logging log4net trace

我想知道日志记录和跟踪之间的区别是什么.

差异基本上是跟踪是更详细的日志,为开发人员提供了在运行时调试应用程序的工具吗?

我一直在尝试使用log4net并进行日志记录.现在我想知道我是否应该进行跟踪以及是否可以/应该使用log4net进行此目的.我应该使用log4net进行跟踪吗?log4net记录器是否有一些跟踪级别?我应该使用不同的日志级别进行调试和跟踪,还是可以使用相同的?你能给出一个简单的例子来说明如何对一个简单的方法进行记录和跟踪吗?

编辑:尽管下面有一些有用的答案,我仍然不确定我应该如何进行跟踪与日志记录.

我的业务层中有以下方法,我想添加日志/跟踪.我想知道如何有效地做到这一点.在记录/跟踪方面,以下方法是否可以接受?日志消息应该是Info类型而不是Debug类型吗?我记录的调试消息是否被视为跟踪?你会怎么改变它?


IEnumerable<Car> GetCars()
{
   try
   {
      logger.Debug("Getting cars");
      IEnumerable<Car> cars = CarAccessor.GetCars().ConvertAll(DataAccessToBusinessConverter);
      logger.Debug("Got total of " + cars.Count + " cars"); 
   } catch (Exception e) {
      logger.Error("Error when getting cars", e);
      throw new Exception("Unexpected error when getting cars");
   }
}

mar*_*tin 26

日志记录是记录信息的通用术语 - 跟踪是用于调试的特定日志记录形式.

在.NET中,System.Diagnostics.Trace和System.Diagnostics.Debug对象允许简单地记录到可以在app.config中配置的许多"事件侦听器".您还可以使用TraceSwitches配置和过滤(例如,在错误和信息级别之间).

private void TestMethod(string x)
{
    if(x.Length> 10)
    {
        Trace.Write("String was " + x.Length);
        throw new ArgumentException("String too long");
    }
}
Run Code Online (Sandbox Code Playgroud)

在ASP.NET中,有一个特殊版本的Trace(System.Web.TraceContext)将写入ASP页面底部或Trace.axd.在ASP.NET 2+中,还有一个称为健康监控的更全面的日志框架.

与内置的Trace甚至ASP Health Monitoring相比,Log4Net是一种更丰富,更灵活的跟踪或日志记录方式.与Diagnostics.Trace一样,您可以在config中配置事件侦听器("appenders").对于简单的跟踪,使用很简单,就像内置Trace一样.使用Log4Net的决定是您是否有更复杂的要求.

private void TestMethod(string x)
{
    Log.Info("String length is " + x.Length);
    if(x.Length> 10)
    {
        Log.Error("String was " + x.Length);
        throw new ArgumentException("String too long");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是Log4Net有log4net.Appender.TraceAppender,它以与Trace类相同的方式输出到Visual Studio Output窗口. (7认同)

Kev*_*tle 13

IMO ......

日志记录应该用于开发调试(但它不可避免地以这种方式使用)
日志记录应该设计用于操作监视和故障排除 - 这是它的存在理由.

跟踪应该设计用于开发调试和性能调整.如果在现场可用,它可以用于真正的低级操作故障排除,但这不是它的主要目的

鉴于此,我见过(和设计/实现)的最成功的方法结合两个在一起.最好将两个工具分开,每个工具尽可能地完成一项工作.


Bob*_*ler 11

log4net非常适合两者.我们通过使用DEBUG日志记录级别来区分对发布后诊断有用的日志记录和用于开发目的的"跟踪".具体而言,开发人员使用以下内容记录其跟踪输出(在开发期间仅有用的内容)Debug().我们的开发配置将Level设置为DEBUG:

<root>
        <level value="DEBUG" />
        ...
</root>
Run Code Online (Sandbox Code Playgroud)

在产品发布之前,级别更改为"INFO":

<level value="INFO" />
Run Code Online (Sandbox Code Playgroud)

这将从发布日志记录中删除所有DEBUG输出,但保留INFO/WARN/ERROR.

还有其他log4net工具,如过滤器,分层(按命名空间)记录,多个目标等,我们发现上述简单方法非常有效.

  • 大多数时候我认为这是真的.有一些特殊情况,例如跟踪实时设备接口,其中像log4net这样的通用工具可能不是最佳选择.顺便说一句:我们使用DEBUG,因为它是预定义的级别.您还可以定义自己的级别:例如TRACE (2认同)

Alo*_*aus 8

记录不是跟踪.这两个应该是具有不同性能特征的不同库.事实上,我自己编写了一个跟踪库,它具有唯一属性,当启用了跟踪的方法留有异常时,它可以自动跟踪异常.除此之外,还可以优雅地解决代码中特定位置触发异常的问题.


Kar*_*arl 0

记录!=调试

有时保留日志文件对于解决客户端问题是必要的,它们证明服务器端发生了什么。