有些人使用ELMAH而不是log4net。什么使它更好?
我在Stack Overflow问题的答案中找到了关于ELMAH的信息。如何登录C#?
有些人使用ELMAH而不是log4net。什么使它更好?
我在Stack Overflow问题的答案中找到了关于ELMAH的信息。如何登录C#?
Answers:
ELMAH的目的是跟踪Web应用程序的错误和异常,并允许您通过许多不同的机制(SQL,RSS,Twitter,文件,电子邮件等)轻松记录或查看这些异常。如果您没有内置的异常处理,则ELMAH很可能会为您提供Web应用程序环境中的异常处理所需的内容。
Log4net也可以用于异常日志记录,但是您可能需要滚动自己的处理程序才能插入Web应用程序。如果您需要进行其他类型的信息记录,则Log4net将超越ELMAH,因为log4net是通用记录框架。Log4net也可以在几乎任何.NET应用程序中使用。
Log4Net是一个通用日志记录框架,带有打算在您的应用程序(Web,控制台,dll等)中使用的API。
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应用程序中记录异常。您不会在应用程序中看到对ELMAH的引用,它没有与之交互的API。它使用模块和处理程序IIS扩展点确定行为。此外,它还有一个Web前端,可以查看Web应用程序中发生的错误。Log4Net没有前端,只有各种各样的日志接收器(Appender),它们可以将您的日志消息发送到诸如日志文件,syslog服务器,数据库等之类的东西。
关键区别在于ELMAH记录未处理的应用程序异常。log4net记录您告诉它记录的所有内容。您可以配置log4net来记录未处理的异常,但是ELMAH可以立即获取大量有用的信息。
ELMAH的工作方式是创建一个HTTP模块,该模块挂接到错误事件,然后进行日志记录。这很容易被不良的设计挫败和破坏。Log4Net可能需要额外的前期工作,但是如果您使用AOP框架并将其应用于您的类甚至程序集,则可以用很少的代码和精力来实现更好的异常日志记录。
ELMAH仅在可以访问HttpContext时才起作用,而这在WCF服务中很难实现。因此,无论如何,您最终还是要在WCF中使用其他记录器。为什么不只使用一种更通用的解决方案呢?
ELMAH特别用于Web应用程序,而log4net同时用于Web和Windows应用程序。在Web应用程序中,ELMAH比log4net具有更多优势。