log4net和ELMAH有什么区别?

有些人使用ELMAH而不是log4net。 是什么让它变得更好?

我在一个堆栈溢出问题的答案中发现了ELMAH 问题如何在C#中进行日志logging?

ELMAH的目的是跟踪您的Web应用程序的错误和exception,并允许您通过许多不同的机制(SQL,RSS,Twitter,文件,电子邮件等)轻松login或查看这些exception。 如果没有内置的exception处理,ELMAH很可能会在Web应用程序环境中的exception处理方面为您提供所需的内容。

Log4net也可用于exceptionlogging,但是您可能需要将自己的处理程序插入到Web应用程序中。 如果您需要执行其他types的信息logging,Log4net将会照亮ELMAH,因为log4net是一个通用日志logging框架。 Log4net也可以在几乎任何.NET应用程序中使用。

Log4Net是一个通用的日志logging框架,其API将在您的应用程序(networking,控制台,DLL等)中使用。

logger.Debug("Some low level debug message..."); logger.Info("Some basic info"); logger.Warn("Some business logic problem, but not critical"); logger.Error("An unexpected error"); 

ELMAH是一个不引人注意的IIS插件,专门用于在Web应用程序中loggingexception 。 你不会在你的应用程序中看到对ELMAH的引用,它没有与你交互的API。 它使用模块和处理程序IIS扩展指向螺栓的行为。 此外,它还有一个Web前端,用于查看Web应用程序中发生的错误。 Log4Net没有前端,只有各种日志接收器(Appender),可以将日志消息发送到日志文件,系统日志服务器,数据库等。

主要区别在于ELMAHlogging未处理的应用程序exception; log4net会logging你要logging的东西。 您可以configurationlog4net来logging未处理的exception,但是ELMAH可以捕获大量有用的信息。

ELMAH通过创build一个挂钩到错误事件的httpmodule来工作,然后进行日志logging。 这很容易被糟糕的devise所挫败。 Log4Net可能需要额外的工作,但如果您使用AOP框架并将其应用于整个类或甚至程序集,则只需很less的代码和工作就可以实现更好的exception日志logging。

ELMAH只有在访问HttpContext的时候才可以工作,这在WCF服务中很难实现。 所以你最终会使用WCF中的其他logging器。 为什么不使用一个更通用的解决scheme?

ELMAH:

  • Web应用程序

log4net的:

  • Web应用程序

  • Windows应用程序

其他参考: ref_1 ref_2

ELMAH专门用于Web应用程序,而Web和Windows应用程序都使用log4net 。 在Web应用程序中,ELMAH比log4net有更多的优点。

ELMAHfunction非常强大,但它的function也非常具体。 它为你做了很多工作,而我相信Log4Net要求做error handling和日志logging。