Log4net Don';t不必要地生成日志参数

Log4net Don';t不必要地生成日志参数,log4net,Log4net,我有一些日志语句如下: _log.InfoFormat("Log some stuff: {0}", string.Join(", ", someList)); _log.InfoFormat("Log some stuff: {0}", () => string.Join(", ", someList)); _log.InfoDeferred("Log some stuff: {0}", () => string.Join(", " someList)); 如果我将日志级别设

我有一些日志语句如下:

_log.InfoFormat("Log some stuff: {0}", string.Join(", ", someList));
_log.InfoFormat("Log some stuff: {0}", () => string.Join(", ", someList));
_log.InfoDeferred("Log some stuff: {0}", () => string.Join(", " someList));
如果我将日志级别设置为Info以下,那么这些语句将从日志文件中忽略,但是参数(string.Join stuff)仍然会不必要地生成。有没有办法做到这一点:

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

我没有看到任何关于这个的情报。有没有什么好的(简洁的)解决方法,或者其他框架可以进行延迟参数生成?

我最后做了一个小小的扩展方法:

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());
    }
}

我只是把它包装在一个if语句中。它并不优雅,但它直截了当且快速。