有些人正在使用ELMAH而不是log4net。是什么让它更好?
我在an answer to Stack Overflow question How do I do logging in C#?
中发现了ELMAH答案 0 :(得分:111)
Log4Net 是一个通用日志记录框架,其API用于在您的应用程序中使用(web,console,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没有前端,只有各种日志接收器(Appender)可以将日志消息发送到日志文件,系统日志服务器,数据库等等。
答案 1 :(得分:90)
ELMAH用于跟踪Web应用程序的错误和异常,并允许您通过许多不同的机制(SQL,RSS,Twitter,文件,电子邮件等)轻松地记录或查看这些异常。如果您没有内置的异常处理ELMAH很可能会在Web应用程序环境中的异常处理方面为您提供所需的内容。
Log4net也可以用于异常日志记录,但是您可能需要使用自己的处理程序来插入Web应用程序。如果您需要进行其他类型的信息记录,Log4net将会超越ELMAH,因为log4net是一个通用的日志记录框架。 Log4net几乎可以在任何.NET应用程序中使用。
答案 2 :(得分:35)
关键区别在于ELMAH记录未处理的应用程序异常; log4net记录你告诉它记录的任何内容。您可以配置log4net来记录未处理的异常,但是ELMAH会立即捕获大量有用的信息。
答案 3 :(得分:5)
ELMAH的工作原理是创建一个挂钩到错误事件然后进行日志记录的httpmodule。糟糕的设计很容易挫败和打破这种情况。 Log4Net可能需要预先进行额外的工作,但如果您使用AOP框架并将其应用于您的类甚至程序集,您可以用很少的代码和工作量来实现更好的异常日志记录。
ELMAH仅在可以访问HttpContext时才有效,而HttpContext在WCF服务中很难实现。所以你最终还是会在WCF中使用som eother logger。为什么不使用一种更普遍的解决方案。
答案 4 :(得分:4)
答案 5 :(得分:1)
ELMAH 专门用于Web应用程序,而 log4net 用于Web和Windows应用程序。在Web应用程序中,ELMAH比log4net具有更多优势。
答案 6 :(得分:0)
ELMAH非常强大,但也非常具体。它为你做了很多工作,而我相信Log4Net需要你来进行错误处理和记录。