在我的程序中共享一个日志类

时间:2013-01-29 08:15:40

标签: c# logging

我将使用反射在运行时将一些类加载到我的程序中。我希望这些类能够使用与主程序相同的日志记录类。

提前考虑,我该如何处理?会使用静态类吗?

我宁愿不使用日志框架,因为它对我想要的东西来说太过分了。

感谢。

4 个答案:

答案 0 :(得分:2)

如果你真的不想使用日志框架(这是可以理解的),那么你可能想看一下Singleton模式。

using System;

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

请注意,只能从.Instance属性创建/访问/访问此类,该属性共享相同的实例。

答案 1 :(得分:0)

看看log4net。这将处理你想要的所有事情。如果你需要在特殊地方登录,请实现自己的appender。其他日志框架将提供您需要的功能。无需重新发明日志。

log4net

答案 2 :(得分:0)

如果你想使用单身注意事项,那么在C#中它可以用更简洁的方式实现:

public class Singletone
{
   public static readonly Singletone Instance = new Singletone();

   private Singletone() {}
   // other methods 
   public void DoTheJob(){}
}

// usage
Singletone.Instance.DoTheJob();

此实现解决了延迟初始化(仅在应用程序域中第一次使用类时执行字段初始化程序)以及线程安全(静态初始化程序在.NET中保证为线程安全)等问题。

答案 3 :(得分:0)

您可以使用名为ILogger的公共接口包装记录器实现 - 您将加载的所有类将接受其构造函数中的接口 - 您可以在创建它们时将记录器实现注入其中。 另外 - 关于运行时的加载 - 你听说过MEF吗? http://msdn.microsoft.com/en-us/library/dd460648.aspx - 在这方面它可能对您有所帮助,并会自动将记录器依赖项注入您加载的新类中

我不认为类引用的单例记录器是好的,因为它会将记录器从您的代码库紧密耦合到您创建的类。构造函数中的注入和接口会将它们与记录器松散地耦合,并使它们更加独立。可测试的。