如何使用NLog LogMessageGenerator委托
本文关键字:委托 LogMessageGenerator NLog 何使用 | 更新日期: 2023-09-27 18:00:12
如果我想用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
的重载的目的是推迟日志消息的构建。
这对于从线程调用记录器的情况可能很有用,这些情况需要高度负责(UI线程或HTTP请求线程就是很好的例子),并且您知道,构建特定的日志消息很耗时。
使用这些重载和异步日志记录,NLog将尽快将控制权返回给调用者,并稍后在后台线程上执行传递的委托。
仅此而已
我的意思是,在这里和那里传递委托不会使您的或NLog代码更快。此外,这个:
_logger.Info(() => { return "test" });
将慢,与相比
_logger.Info("test");
因为方法调用开销而不是使用现有的字符串文字。
第页。S.
注意,用于构造委托的lambda表达式可以用更简单的方式编写:
_logger.Info(() => "test");
_logger.Info(() => string.Format("msg", myParams));
同样,这与性能无关,而是与可读性有关。