如果我想用NLog实现最佳性能,我的代码中应该做些什么来实现这个目标?
(当然我在NLog.config中启用了异步。)
使用委托编写日志消息怎么样?
_logger.Info(() => { return "test" });
不幸的是我无法弄清楚如何“正确”使用它。这甚至记录了吗?
_logger.Info(() => { return string.Format("msg", myParams); }); // Is that the way to go?
答案 0 :(得分:4)
建议如下:
_logger.Info("test");
_logger.Info("test with {0}", "value");
_logger.Info(() => expensiveOperation);
或_logger.Info(() => {expensiveOperation()});
_logger.IsInfoEnabled
等
答案 1 :(得分:2)
如果我想用NLog实现最佳性能
接受LogMessageGenerator
的重载的目的是推迟日志消息构造。
这对于从线程调用logger的情况非常有用,这需要高度负责(UI线程或HTTP请求线程是很好的例子),并且您知道,构建特定日志消息非常耗时。
使用这些重载和异步日志记录,NLog会将控制权返回给调用者ASAP,稍后将在后台线程上执行传递的委托。
全部 我的意思是,在这里和那里传递代表将不会使你的或NLog代码更快。而且,这个:
_logger.Info(() => { return "test" });
与相比,将更慢。
_logger.Info("test");
因为方法调用开销而不是使用现有的字符串文字。
P.S。
请注意,用于构造委托的lambda表达式可以用更简单的方式编写:
_logger.Info(() => "test");
_logger.Info(() => string.Format("msg", myParams));
同样,这不是关于性能,而是关于可读性。