C# 企业库日志记录应用程序块选项

C# 企业库日志记录应用程序块选项,c#,enterprise-library,C#,Enterprise Library,日志应用程序块是否能够处理这些情况或它们的组合 如果日志记录失败,不要抛出异常 仅适用于特定异常/异常类型 如果日志记录失败,则退回到另一种类型IE数据库日志记录失败,退回到电子邮件或网络发送 我的实际使用案例示例: 我正在为我们的团队编写一个票务系统。如果通过电子邮件向团队发送新票证创建失败,我希望它将其报告到异常/错误日志中,但不要向用户报告,无论日志记录在回退堆栈中有多深,用户都不需要错误消息,票证已保存。我希望出现一些错误位置/异常,但我现在处理的大多数错误位置/异常都没有 我对ELLA

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

如果日志记录失败,不要抛出异常 仅适用于特定异常/异常类型 如果日志记录失败,则退回到另一种类型IE数据库日志记录失败,退回到电子邮件或网络发送 我的实际使用案例示例:


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

我对ELLAB的经验是,当它不起作用时,几乎不可能找出原因。日志记录对于依赖诸如ELLAB这样的重量级组件来实现系统的一部分来说通常是一件微不足道的事情,而使用ELLAB有时是毫无意义的

我使用了三个日志平台——Log4Net、ELMAH和ELLAB,并推出了自己的日志平台。ELLAB依赖于EL的其他部分,需要负重才能站立和运行。L4D L4N是ELLAB的一个更轻薄的版本,它更容易使用,并提供同等的功能。ELMAH是一个很好的网站错误日志库


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

我对ELLAB的经验是,当它不起作用时,几乎不可能找出原因。日志记录对于依赖诸如ELLAB这样的重量级组件来实现系统的一部分来说通常是一件微不足道的事情,而使用ELLAB有时是毫无意义的

我使用了三个日志平台——Log4Net、ELMAH和ELLAB,并推出了自己的日志平台。ELLAB依赖于EL的其他部分,需要负重才能站立和运行。L4D L4N是ELLAB的一个更轻薄的版本,它更容易使用,并提供同等的功能。ELMAH是一个很好的网站错误日志库


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

我使用ELMAH进行web日志记录,使用EL日志块进行其他所有操作。我发现EL日志块足够灵活,可以按照您的要求执行操作


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

我使用ELMAH进行web日志记录,使用EL日志块进行其他所有操作。我发现EL日志块足够灵活,可以按照您的要求执行操作


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

如果日志记录没有引发异常,您可以通过以下方式使用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});

如果日志记录未引发错误,则可以通过以下方式使用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});

马斯洛,请阅读我对其他回复的评论。此外,我强烈建议您阅读《开发人员指南》的本章-


我不建议你推出自己的伐木基础设施。为什么不使用你不必维护的成熟软件,而是专注于应用程序的业务逻辑呢?

Maslow,请阅读我对其他回复的评论。此外,我强烈建议您阅读《开发人员指南》的本章-


我不建议你推出自己的伐木基础设施。为什么不使用一些您不必维护的成熟软件,而是专注于应用程序的业务逻辑?

在我希望回退到其他系统的情况下,这将如何工作?同一应用程序中是否可以有多个EL日志记录块?或者它会导致major.config文件出现意大利面条?在我希望回退到其他系统的情况下,这将如何工作?在同一个应用程序中可以有多个EL日志记录块吗?或者它会导致major.config文件出现意大利面条?我还没有在企业库中做过任何事情,每次我看到我想尝试的东西,我就跳上EL,这是一种硬性的潮流,研究回顾和比较,并看到评审人员认为另一个框架对于特定区块更健壮、更容易。企业库的理念是,日志记录是应用程序的增值服务,
因此,必须优雅地处理日志记录过程中的任何故障,而不会导致主业务流程出现异常。日志块通过将所有日志记录失败发送到一个名为日志记录错误和警告的特殊类别来实现这一点。默认情况下,这些错误消息会写入Windows事件日志,但如果愿意,您可以将此类别配置为使用不同的跟踪侦听器写入其他目标。至于依赖项,dll实验室唯一依赖的是这些:Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.Unity.dll Microsoft.Practices.Unity.Interception.dll Microsoft.Practices.ServiceLocation.dll,它们是EntLib管道的核心。@GrigoriMelnik:ELLAB自从一年多前我回答这个问题以来,情况有所好转。希望他们也解决了几乎不可能弄清楚为什么它不起作用的问题。我仍然认为一个拥有四个外部依赖项的日志库对于它自己的价值来说仍然很重。如果您也在使用Unity和El的其他部分,那就好了,但对于即插即用日志库来说就不那么好了。我上面描述的日志块的on failure行为至少从2006年1月的v2.0开始就存在了。自一年前以来,您应该看到的唯一改进是perf和config工具。看一看从18:00开始的视频链接。我还没有在企业图书馆做任何事情,每次我看到我想尝试的东西,我就跳上EL,这是一个硬性的潮流,研究回顾和比较,请注意,评审人员认为另一个框架对于特定的区块更健壮、更容易。企业库的理念是,日志记录是应用程序的增值服务,因此日志记录过程中的任何故障都必须妥善处理,而不会导致主业务过程出现异常。日志块通过将所有日志记录失败发送到一个名为日志记录错误和警告的特殊类别来实现这一点。默认情况下,这些错误消息会写入Windows事件日志,但如果愿意,您可以将此类别配置为使用不同的跟踪侦听器写入其他目标。至于依赖项,dll实验室唯一依赖的是这些:Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.Unity.dll Microsoft.Practices.Unity.Interception.dll Microsoft.Practices.ServiceLocation.dll,它们是EntLib管道的核心。@GrigoriMelnik:ELLAB自从一年多前我回答这个问题以来,情况有所好转。希望他们也解决了几乎不可能弄清楚为什么它不起作用的问题。我仍然认为一个拥有四个外部依赖项的日志库对于它自己的价值来说仍然很重。如果您也在使用Unity和El的其他部分,那就好了,但对于即插即用日志库来说就不那么好了。我上面描述的日志块的on failure行为至少从2006年1月的v2.0开始就存在了。自一年前以来,您应该看到的唯一改进是perf和config工具。请看从18:00开始链接的视频。我无法获取对检测的引用,因为logger.writer没有方法GetInstrumentationEventProvider。这是企业库5吗?我无法获取对检测的引用,因为logger.writer没有方法GetInstrumentationEventProvider。这是企业图书馆5吗?