【问题标题】:Logging throughout class library without references passes在没有引用的情况下记录整个类库
【发布时间】:2011-12-24 12:33:15
【问题描述】:

我有一个 C# 类库,它为我做了很多不同的功能。我希望能够在整个课程中进行日志记录,但是,我真的不想在整个过程中传递日志库的实例。

例如

public void MyMethod(LoggingClass logger)
{
  logger.log("something");
}

public void MyMehtod2(LoggingClass logger)
{
  logger.log("something else");
}

我在这个库中到处都有课程,并且正在努力寻找一种好的方法来做到这一点。我一直在研究 Ninject 的依赖注入,但似乎无法理解它应该如何工作。

总而言之,我希望能够拥有一个日志类,并且能够将其实例化一次,然后在任何地方使用它来进行日志。

【问题讨论】:

    标签: c# .net logging class-library


    【解决方案1】:

    您可以为您的记录器使用singleton,并在您喜欢的任何地方调用它,如Logger.GetInstance().Log(something)

    【讨论】:

    • 我认为单例是不好的形式,在这种情况下不合理。
    • 我想你可以解释一下。
    • 单身不应该是任何解决方案的首要考虑因素。如果您首先认为“单例可以在这里工作”,您应该简单地使用静态类。但是,如果您确定静态类确实需要一个状态,或者必须实现某个接口,然后考虑一个单例。大多数情况下,静态类就足够了。
    • 记录器通常需要一个状态,但你是对的,单例并不是首先想到的。
    • 我还没有写一个需要状态的记录器。我在静态记录器中使用了一个嵌套类 - 取决于要求。
    【解决方案2】:

    我认为不需要单身人士。只需在库中使用静态类:

    internal static class Logger {
    
    static Logger() {
    
        // configure logger
    
    }
    
    internal static void Log(string Message, params object[] args) {
    
        var message = string.Format(Message, args);
        //  write message
    
    }
    

    【讨论】:

    • 注意:Log 签名中的第二个参数有错字。关键字是params 而不是param,整行应为:internal static void Log(string Message, params object[] args) {
    • 感谢@DavidTansey:已修复
    • @IAbstract 我如何在调用类库的代码和类库本身之间共享一个公共日志?
    【解决方案3】:

    我的偏好是实现@IAbstract 提到的一些静态类的扩展方法。如果你的类都实现了你自己的 ILog 接口,你可以这样做:

    public static void Log(this ILog source, string message)
    {
        source.Log(message, null);
    }
    
    public static void Log(this ILog source, string message, param object[] args)
    {
        // Assuming a static class as mentioned by @IAbstract
        Logger.Log(message, args);
    }
    

    然后在您的班级或任何地方,具体取决于您可以使用this.Log(message) 或外部myClass.Log(message) 的保护级别。这不需要公开,但这取决于图书馆的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多