不要不必要地生成日志参数

时间:2014-12-19 16:27:38

标签: log4net

我有一些这样的日志声明:

_log.InfoFormat("Log some stuff: {0}", string.Join(", ", someList));

如果我将日志级别设置为Info之下,则会从日志文件中省略这些语句,但仍然会不必要地生成参数(string.Join stuff)。有没有办法做这样的事情:

_log.InfoFormat("Log some stuff: {0}", () => string.Join(", ", someList));

我没有在intellisense中看到任何东西。是否有任何好的(简明的)变通方法或其他可以进行延迟参数生成的框架?

1 个答案:

答案 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));