log4net和ELMAH有什么区别?

110

可能是 https://dev59.com/_3RA5IYBdhLWcg3w2x2W 的重复问题。 - empi
现在 .net core 出现了,情况是否有所改变?(截至 2018 年 1 月,elmah 不支持 .net core)。 - Chaitanya Gadkari
7个回答

111

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服务器、数据库等。


23
更正一下,Elmah确实有一个API供开发者与之交互。例如,通过Elmah API可以实现信号传递。 - Ed DeGagne
8
还有一个更正吗?ELMAH是一个.NET HttpModule/HttpHandler,而不是IIS插件。ARR是插件,而不是ELMAH。 - Maxime Rouiller
你对这些评论有何回应? - Peter Mortensen

92

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

Log4net也可用于异常记录,但是您可能需要编写自己的处理程序来插入到您的Web应用程序中。如果您需要进行其他类型的信息记录,则log4net将优于ELMAH,因为log4net是一个通用的日志记录框架。Log4net也可以用于几乎任何.NET应用程序中。


3
log4net 可以让您拥有更多的控制。 - DarthVader
6
使用此 ELMAH Appender for log4net 可以获得两全其美的效果。使用 log4net 记录所需内容(如 debug、info、warn、error),但将其存储在 ELMAH 中 https://www.nuget.org/packages/elmahappender_log4net_1.2.10/。 - Sturla

36

ELMAH记录未处理的应用程序异常,而log4net记录您希望记录的任何内容。你可以配置log4net来记录未处理的异常,但是ELMAH默认捕获了大量有用的信息。


1
ELMAH可以在开箱即用的情况下捕获大量有用的信息,如果您进行适当的配置。使用相同的时间,您可以使用log4net实现更多的控制。 - DarthVader
DarthVader,你有一个相同功能的log4net配置样例吗? - JasonD
5
ELMAH可以在无需进行任何配置的情况下,捕获大量有用信息。通过额外的配置,它还能处理未处理异常和已处理异常。 - Trevor de Koekkoek

5

ELMAH通过创建一个HTTP模块来钩取错误事件,并进行日志记录。但这种方法容易被设计不良的程序破坏。Log4Net可能需要更多的前期工作,但如果您使用AOP框架并将其应用于整个类甚至程序集,您就可以用非常少的代码和努力实现更好的异常日志记录。

ELMAH只有在访问HttpContext时才能正常工作,在WCF服务中很难实现。因此,您最终会在WCF中使用其他记录器。为什么不使用一种更通用的解决方案呢?


4

ELMAH:

  • Web应用程序

Log4net:

  • Web应用程序

  • Windows应用程序

其他参考: ref_1 ref_2


1

ELMAH 是专门用于 Web 应用程序的,而 log4net 则用于 Web 和 Windows 应用程序。在 Web 应用程序中,ELMAH 比 log4net 有更多的优势。


5
这些优势是什么?我很快就要开始学习ASP.NET了,所以我想知道您的专业意见。我在.NET方面还是初学者,所以很难理解他们网站上说的话。 - IAdapter
即使您没有编写任何代码,也可以查看报告。请在此处查看ELMAH的功能:http://code.google.com/p/elmah/ - Adeel
Elmah非常有限,唯一的“优势”是报告,但它仅限于具有HttpContext访问权限的Web应用程序。您可以让其他记录器记录数据到许多其他可报告的来源。 - Dustin Davis

0

ELMAH 功能强大,但也非常专注于它所做的事情。它会为您完成很多工作,而我认为 Log4Net 需要自己处理错误和记录日志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接