有些人使用 ELMAH 代替 log4net。它有什么更好的地方呢?
Log4Net 是一个通用的日志记录框架,其API旨在用于应用程序(Web、控制台、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应用程序中的异常。您不会在您的应用程序中看到对ELMAH的引用,它没有与之交互的API。它使用模块和处理程序IIS扩展点来进行行为挂载。此外,它还有一个Web前端,用于查看发生在您的Web应用程序中的错误。Log4Net没有前端,只有各种日志汇(Appenders),可以将您的日志消息发送到诸如日志文件、syslog服务器、数据库等。
ELMAH的作用是跟踪您的Web应用程序中的错误和异常,并允许您通过多种不同的机制(SQL、RSS、Twitter、文件、电子邮件等)轻松记录或查看这些异常。如果您没有内置的异常处理,ELMAH很可能会为您提供在Web应用程序环境中所需的异常处理。
Log4net也可用于异常记录,但是您可能需要编写自己的处理程序来插入到您的Web应用程序中。如果您需要进行其他类型的信息记录,则log4net将优于ELMAH,因为log4net是一个通用的日志记录框架。Log4net也可以用于几乎任何.NET应用程序中。
ELMAH记录未处理的应用程序异常,而log4net记录您希望记录的任何内容。你可以配置log4net来记录未处理的异常,但是ELMAH默认捕获了大量有用的信息。
ELMAH通过创建一个HTTP模块来钩取错误事件,并进行日志记录。但这种方法容易被设计不良的程序破坏。Log4Net可能需要更多的前期工作,但如果您使用AOP框架并将其应用于整个类甚至程序集,您就可以用非常少的代码和努力实现更好的异常日志记录。
ELMAH只有在访问HttpContext时才能正常工作,在WCF服务中很难实现。因此,您最终会在WCF中使用其他记录器。为什么不使用一种更通用的解决方案呢?
ELMAH 是专门用于 Web 应用程序的,而 log4net 则用于 Web 和 Windows 应用程序。在 Web 应用程序中,ELMAH 比 log4net 有更多的优势。
ELMAH 功能强大,但也非常专注于它所做的事情。它会为您完成很多工作,而我认为 Log4Net 需要您自己处理错误和记录日志。