企业库日志应用程序块选项

时间:2010-02-09 15:13:45

标签: c# enterprise-library

日志记录应用程序块是否能够处理这些情况或它们的组合?

  • 如果日志记录失败,请不要抛出异常
    • 仅针对特定例外/例外类型
  • 如果日志记录失败,则回退到其他类型(即数据库日志记录失败,回退到电子邮件或网络发送)

我的实际使用案例:

我正在为我们的团队编写票务系统。如果在新的故障单创建时通过电子邮件发送团队失败,我希望它向异常/错误日志报告,但不要向用户报告,无论回退堆栈中的记录失败有多深,用户都不会需要一条错误信息,保存了故障单。一些错误的位置/异常我想要冒泡,但我现在正在处理的大多数错误位置/异常我没有。

4 个答案:

答案 0 :(得分:3)

我对ELLAB的经验是,当它不起作用时几乎不可能找出原因。记录是依赖于诸如ELLAB之类的重量级组件的系统的(通常)无关紧要的实现部分,这可能是完全痛苦的工作,有时是毫无意义的。

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

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

答案 1 :(得分:3)

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

我不建议推出自己的日志记录基础设施。为什么不使用您不需要维护的成熟内容,而是专注于应用程序的业务逻辑?

答案 2 :(得分: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});

答案 3 :(得分:1)

我使用ELMAH进行Web日志记录,使用EL Logging Block进行其他操作。我发现EL记录块足够灵活,可以满足您的要求。

我会将日志记录逻辑包装到某个日志记录类中,并处理您认为合适的异常。