我有一些这样的日志声明:
_log.InfoFormat("Log some stuff: {0}", string.Join(", ", someList));
如果我将日志级别设置为Info之下,则会从日志文件中省略这些语句,但仍然会不必要地生成参数(string.Join stuff)。有没有办法做这样的事情:
_log.InfoFormat("Log some stuff: {0}", () => string.Join(", ", someList));
我没有在intellisense中看到任何东西。是否有任何好的(简明的)变通方法或其他可以进行延迟参数生成的框架?
答案 0 :(得分:0)
我最终制作了一个小扩展方法:
public static void InfoDeferred(this ILog source, string message, params Func<object>[] deferredArgs)
{
if(source.IsInfoEnabled)
{
var args = new List<object>();
foreach(var arg in deferredArgs)
{
args.Add(arg());
}
source.InfoFormat(message, args.ToArray());
}
}
像这样使用:
_log.InfoDeferred("Log some stuff: {0}", () => string.Join(", " someList));