2010-02-09 92 views
1

日志记录应用程序块是否能够处理这些问题或它们的组合?企业库日志应用程序块选项

  • 如果日志记录失败,不抛出异常
    • 特殊例外情况/异常类型只
  • 如果日志记录失败,退回到另一种类型(即数据库日志记录失败,回落到我的实际使用情况发电子邮件或网络发送)

例子:

我正在为我们的团队写票务系统。如果通过电子邮件向新团队创建新故障单,则我希望它向异常/错误日志报告该情况,但不会冒用户名,无论日志记录堆栈中日志记录失败的深度如何,用户都不会需要一个错误信息,保存票证。一些错误地点/例外我想冒泡,但是我现在处理的大多数我不知道。

回答

3

我对ELLAB的经验是,当它不起作用时,几乎不可能找出原因。日志记录就是这样一个依赖于像ELLAB这样一个重量级组件的系统的(通常)轻而易举的实现部分,它可能是一个非常痛苦的工作,有时是毫无意义的。

我已经使用了三种日志记录平台--Log4Net,ELMAH和ELLAB - 并且已经推出了我自己的。 ELLAB依赖于EL的其他部分,并且需要重新启动才能启动并运行。 L4D L4N是ELLAB的瘦身版本,它更容易上手并提供等效的功能。 ELMAH是一个用于记录网站错误的好库。

我建议在ELLAB之前使用L4N,特别是如果您没有使用任何其他EL块。如果您严重依赖企业图书馆,ELLAB可能是您最好的选择;如果没有发生,祝你好运。网站一定要使用ELMAH。如果您正在编写一个较小的应用程序,请考虑滚动您自己的日志代码。

+0

我还没有在企业库中做过任何事情,每当我看到我想尝试的东西时,我就跳入EL是艰难的潮流,研究评论和比较,并且看到评论者认为另一个框架更加健壮和更容易对于特定的块 – Maslow 2010-02-16 19:58:41

+1

企业库的理念是,日志记录是应用程序的增值服务,因此日志记录过程中的任何失败都必须适度地处理,而不会引发主要业务流程的异常。日志记录块通过将所有日志记录失败发送到一个名为记录错误和警告的特殊类别来实现此目的。默认情况下,这些错误消息被写入Windows事件日志,但您可以将此类别配置为使用不同的跟踪侦听器写入其他目标(如果您愿意)。 – 2011-04-11 15:04:29

+0

至于依赖性,唯一的DLL LAB取决于有这些:Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.Unity.dll Microsoft.Practices.Unity.Interception.dll Microsoft.Practices.ServiceLocation.dll 这是EntLib管道的核心。 – 2011-04-11 15:05:20

1

我使用ELMAH进行网络日志记录,并使用EL记录模块进行其他任何操作。我发现EL记录块非常灵活,可以完成你所要求的功能。

我会将日志逻辑包装到某个日志记录类中,并处理异常情况如何处理。

+0

在我希望回退到其他系统的情况下,这种方式会如何工作,您是否可以在同一个应用中使用多个EL日志记录块?或者它会导致主要的.config文件意大利面? – Maslow 2010-02-16 19:57:16

2

如果记录不扔你可以使用类LoggingInstrumentationProvider的failureLoggingError事件是这样的:

LoggingInstrumentationProvider instrumentation = Logger.Writer.GetInstrumentationEventProvider() as LoggingInstrumentationProvider; 

instrumentation.failureLoggingError += (s, z) => { throw z.Exception; }; 

.... 

.... 

//Logging code 

Logger.Write(new LogEntry() { Message = "bla bla", Severity = TraceEventType.Critical}); 
+0

由于logger.writer没有方法GetInstrumentationEventProvider,我无法获取检测的参考。这是企业图书馆5吗? – 2013-09-04 06:34:05

3

马斯洛,请阅读我的意见,其他答复。另外,我强烈建议您阅读开发人员指南的这一章 - As Easy As Falling Off a Log

我不会建议推出自己的日志记录基础架构。为什么不使用你不需要维护的成熟的东西,而是专注于你的应用的业务逻辑?

相关问题