[英]How to use the NLog LogMessageGenerator delegate?
如果我想用NLog实现最佳性能,我在代码中应该做些什么来实现这个目标?
(当然我在NLog.config中启用了异步。)
使用委托写日志消息怎么样?
_logger.Info(() => { return "test" });
不幸的是我无法弄清楚如何“正确”使用它。 这甚至记录了吗?
_logger.Info(() => { return string.Format("msg", myParams); }); // Is that the way to go?
建议如下:
_logger.Info("test");
_logger.Info("test with {0}", "value");
_logger.Info(() => expensiveOperation);
或_logger.Info(() => {expensiveOperation()});
_logger.IsInfoEnabled
等 如果我想用NLog实现最佳性能
接受LogMessageGenerator
的重载的目的是推迟日志消息构造。
这对于从线程调用logger时需要高度负责的情况(UI线程或HTTP请求线程是很好的例子),并且您知道,构建特定日志消息非常耗时。
使用这些重载和异步日志记录,NLog将控制返回给调用者ASAP,并稍后将在后台线程上执行传递的委托。
这就是全部 。
我的意思是,在这里和那里传递代表不会使你的或NLog代码更快 。 此外,这:
_logger.Info(() => { return "test" });
与以下相比会比较慢
_logger.Info("test");
因为方法调用开销而不是使用现有的字符串文字。
PS
注意,用于构造委托的lambda表达式可以用更简单的方式编写:
_logger.Info(() => "test");
_logger.Info(() => string.Format("msg", myParams));
同样,这不是关于性能,而是关于可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.