log4net和ELMAH有什么区别?

IAd*_*ter 108 .net c# logging log4net elmah

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

我在回答Stack Overflow问题时发现了ELMAH 如何登录C#?

Mik*_*nty 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");
Run Code Online (Sandbox Code Playgroud)

ELMAH是一个不显眼的IIS插件,专门用于记录Web应用程序中的异常.您不会在应用程序中看到对ELMAH的引用,它没有您与之交互的API.它使用模块和处理程序IIS扩展点来屏蔽行为.此外,它还有一个Web前端,用于查看Web应用程序中发生的错误.Log4Net没有前端,只有各种日志接收器(Appender)可以将日志消息发送到日志文件,系统日志服务器,数据库等.

  • 一次更正,Elmah确实有开发人员可以与之交互的Api.例如,通过Elmah Api实现信令. (23认同)
  • 另一个纠正?ELMAH是一个.NET HttpModule/HttpHandler.它不是IIS插件.ARR是一个插件.不是ELMAH. (8认同)

Mar*_*man 91

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

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

  • 通过将这个ELMAH Appender用于log4net,您可以充分利用这两个方面.只需使用log4net记录您喜欢的内容(调试,信息,警告,错误),但将其存储在ELMAH https://www.nuget.org/packages/elmahappender_log4net_1.2.10/中 (5认同)
  • log4net为您提供更多控制. (3认同)

Jam*_*Ide 35

关键的区别在于ELMAH记录未处理的应用程序异常; log4net记录你告诉它记录的任何内容.您可以配置log4net来记录未处理的异常,但ELMAH会立即捕获大量有用的信息.

  • ELMAH开箱即用,无需配置即可捕获大量有用信息.通过额外配置,它将处理未处理的异常和处理的异常. (5认同)

Dus*_*vis 5

ELMAH的工作原理是创建一个挂钩到错误事件然后进行日志记录的httpmodule.糟糕的设计很容易挫败和打破这种情况.Log4Net可能需要预先进行额外的工作,但如果您使用AOP框架并将其应用于您的类甚至程序集,您可以用很少的代码和工作量来实现更好的异常日志记录.

ELMAH仅在可以访问HttpContext时才有效,而HttpContext在WCF服务中很难实现.所以你最终还是会在WCF中使用som eother logger.为什么不使用一种更普遍的解决方案呢?