如果我的日志级别为Info或更高,则仅写入日志文件

时间:2018-01-30 15:53:16

标签: c#

我的代码中有记录模块,经常使用。每个日志记录方法的第一个参数始终是日志级别,而其他参数表示格式化字符串及其参数。参数通常调用一些其他函数来计算该参数的值。例如。当我想打印列表时,我使用这样的东西:

Logger.Log(Info, "Printed list is: ", string.Join(", ", myList));

这有什么问题?首先会对string.Join(", ", myList)进行评估,然后在此处调用Log方法,根据当前日志记录级别,将确定是否将消息记录到某个文件中。如果不记录消息(当前日志记录级别小于Info),则不评估string.Join(", ", myList)

只有当前的日志记录级别至少是方法调用中指定的日志级别时,有没有办法(没有大量的手动更改)来调用日志调用和参数评估?

1 个答案:

答案 0 :(得分:0)

您可以在Logging类上创建一个方法,该方法将委托作为参数,并且只有在需要记录消息时才调用委托。像这样的东西

 public static class Logger
 {
      public static void Log(LogLevel level, Func<string> delegateFunction) {
            if (level >= CurrentLogLevel)
            {
                 var stringToLog = delegateFunction();
                 Log(level, stringToLog); // Use normal Log functionality to log it
            }
      }
 }

然后你就可以这样称呼它

Logger.Log(Info, () => $"Printed list is: {string.Join(", ", myList)}");

当然,这要求您可以访问Logger代码。如果不这样做,您可以将其作为扩展名。