企业库日志记录应用程序块选项
日志记录应用程序块是否能够处理这些情况或它们的组合?
- 如果日志记录失败,请不要抛出exception
- 仅适用于特定exception/exception类型
- 如果日志记录失败,则回退到另一种类型(即数据库日志记录失败,回退到电子邮件或网络发送)
我的实际使用案例示例:
我正在为我们的团队编写票务系统。 如果在新的故障单创建时通过电子邮件发送团队失败,我希望它向exception/错误日志报告,但不要向用户报告,无论后备堆栈中的记录失败有多深,用户都不会需要一条错误信息,保存了故障单。 一些错误的位置/例外我想要冒泡,但我现在正在处理的大多数错误位置/exception我没有。
我对ELLAB的经验是,当它不起作用时,几乎不可能找出原因。 记录是依赖于诸如ELLAB之类的重量级组件的系统的(通常)无关紧要的实现部分,这可能是完全痛苦的工作,有时是毫无意义的。
我使用了三个日志记录平台 – Log4Net,ELMAH和ELLAB – 并且已经推出了我自己的平台。 ELLAB具有对EL其他部分的依赖性,并且需要重新启动才能启动和运行。 L4D L4N是ELLAB的更薄版本,更容易上手,并提供同等function。 ELMAH是一个很棒的库,用于记录网站中的错误。
我建议在ELLAB之前使用L4N,特别是如果你没有使用任何其他EL模块。 如果您严重依赖企业库,ELLAB可能是您最好的选择; 然而,如果没有任何反应,祝你好运 网站绝对应该使用ELMAH。 如果您正在编写一个较小的应用程序,请考虑滚动您自己的日志代码。
马斯洛,请阅读我对其他回复的评论。 另外,我强烈建议您阅读开发人员指南的这一章 – 就像落下日志一样容易 。
我不建议推出自己的日志记录基础设施。 为什么不使用您不必维护的成熟内容,而是专注于应用程序的业务逻辑?
如果日志记录没有抛出,您可以使用以下方式使用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});
我使用ELMAH进行Web日志记录,使用EL Logging Block进行其他操作。 我发现EL Logging Block足够灵活,可以满足您的要求。
我会将日志记录逻辑包装到一些日志记录类中,并处理您认为合适的exception。