NLog的集成:使用接口与方法或与Enums?

时间:2013-09-30 06:31:18

标签: c# oop nlog

要集成NLog,我们想要定义一个接口,并且正在考虑两种方法。 我们正在使用C#。

方法1:

public interface ILoggingManager
{
    void DoErrorLogging(type , string ) 
    void DoErrorLogging(type , string  , exception ) 

    void DoTraceLogging(type , string ) 
    void DoTrace Logging(type , string  , exception ) 

    // And so on for all the types that Nlog supports.
     .... 
    // Finally would have 10 methods defined in this interface. 
}

方法2:

//Have an Enum defined for the logging levels
public enum LoggingLevel
{
    Error,
    Warn,
    Info,
    Debug,
    Trace
}

public interface ILoggingManager
{
    void DoLogging(type , LoggingLevel , string ) 
    void DoLogging(type , LoggingLevel   , exception ) 
}

问题:

  1. 保持设计原则(如SOLID)的更好方法是什么?
  2. 哪种方法在性能方面更好?

1 个答案:

答案 0 :(得分:0)

我的回答并未提供直接解决方案,但仍然......

我使用现有日志框架,其中包含所有接口。其余的是(或应该)配置。

我建议您使用log4netslf

如果你坚持使用自己的界面,那么我认为性能在这里不是问题。您可以将枚举值映射到NLog的相应方法(方法2),也可以直接使用它(方法1)。

毫无疑问,方法2更清洁了。我会稍微改变一下:

public interface ILoggingManager
{
    void DoLogging(type , LoggingLevel , string, /* optional */ exception ) 
}

我将描述我在方法2中看到的好处。有时您不知道您将要使用的日志级别是什么。假设您正在检查异常。有时您最终会使用Warn,有时最终会得到Error。如果使用方法2,代码重用更简单:只需选择相关的枚举值即可设置。如果您使用方法1,代码重用可能包括将Action映射到相关方法,并调用它,这使整个事情对于日志记录来说太复杂了......

是的,这里type是什么?消费类的类型?