繁体   English   中英

如何使用NLog LogMessageGenerator委托?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM