【问题标题】:EventLog instance versus static methods - preference?EventLog 实例与静态方法 - 偏好?
【发布时间】:2011-11-17 20:18:16
【问题描述】:

在写入事件日志时,我可以创建一个 EventLog 实例,将其作为成员变量保存,并在每次我想记录消息时调用 WriteEntry(string message)。

或者,我可以只调用静态版本:EventLog.WriteEntry(string source, string message)。

我应该更喜欢一种选择吗?

在我目前的情况下,我打算拥有一个包含一两个来源的自定义日志。

【问题讨论】:

    标签: c# event-log


    【解决方案1】:

    如果您正在编写测试驱动或单元测试代码,则不建议使用静态类。

    我会将 EventLog 包装在一个实现通用 ILog 接口的类中。您可以注入此类或在每个使用它的类中实例化它。如果您需要将 EventLog 替换为其他一些日志记录方法,这将为您提供最佳的灵活性。

    示例界面:

    public interface ILog
    { 
            void Info(string format, params object[] args);
    
            void Warn(string format, params object[] args);
    
            void Error(Exception exception);
    } 
    

    您可以扩展或更改它以创建对您有意义的合同。

    【讨论】:

      【解决方案2】:

      在这种情况下最好实现单例模式

      class Logger
      {
          private static Logger log = null;
          private void Logger()
          {
              setLevel(Logger.INFO);
          }
          public static Logger getLog()
          {
              if (log == null)
              {
                  log = new Logger();
              }
              return log;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-12
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多