【问题标题】:Optional logging dependency for C# library?C# 库的可选日志记录依赖项?
【发布时间】:2011-09-15 18:27:15
【问题描述】:

我一直在使用 C# 开发一个库,并希望为其提供自动记录所有异常的功能。理想情况下,我希望它使用 log4net,从而允许客户端以他们喜欢的方式配置日志(即他们可以将其重定向到 EventLog 或数据库或你有什么)。

但是,如果他们选择不使用日志记录功能,我想避免依赖日志记录。这可行吗?

换句话说,有没有一种方法可以让我有一个 log4net 依赖项,这取决于客户端在配置文件中设置的内容?

【问题讨论】:

    标签: c# .net logging log4net


    【解决方案1】:

    显而易见的答案是将System.Diagnostics.Trace 子系统与自定义TraceSource 一起使用。这样您就可以在配置文件中设置任何您想要的TraceListener,包括log4net、EventLog、文本文件、Console 或XML 文件。

    如果您添加了 log4net TraceListener,则依赖项将在运行时加载,而不是编译。Trace 子系统从一开始就变得非常强大,我建议您研究一下。

    【讨论】:

    • 这听起来很有趣,我得去看看。谢谢。
    【解决方案2】:

    您可以使用 .NET 中已经内置的跟踪子系统 - 它是受配置控制的。

    我自己不会添加依赖项 - 只需通过跟踪 API 发出消息 - 客户端可以根据需要决定如何记录它们。

    【讨论】:

      【解决方案3】:

      比起System.Diagnostics.Trace提供的,我个人更喜欢Log4Net API。

      所以我有自己的抽象层,它使用提供者模型设计模式,并公开类似于 log4net 的 API。然后我可以插入一个 log4net 提供程序,但将来可以随意用不同的提供程序(例如 System.Diagnostics.Trace;EntLib)替换它。

      实现与this one非常相似。

      通过这样做,应用程序不会直接依赖于底层日志记录提供程序,如果您(或您的客户)有其他偏好,您可以轻松切换到不同的提供程序。

      【讨论】:

        猜你喜欢
        • 2023-02-16
        • 2016-07-10
        • 2013-07-10
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 2011-08-25
        • 2013-01-05
        • 2012-10-28
        相关资源
        最近更新 更多