【发布时间】:2023-01-09 15:45:08
【问题描述】:
假设我们在 appsetting.json 中有一个带有 LogLevel 的类别名称为“调试”,下面是源代码行
_logger.LogDebug("SubjectId is {Id}", id);
假设应用程序处于生产状态,我们将日志记录级别改为“信息”而不是“调试”。
但是那段源代码仍然存在于源代码中,日志语句仍然会首先执行,然后以某种方式将日志记录过滤掉。这不是很低效吗,因为它仍然需要调用一个方法?我们可以根本不调用_logger.LogDebug("SubjectId is {Id}", id); 使用一些高级运行时技术让 CLR 运行时根本不调用此方法吗?
还是当前的日志记录设计已经使用了某种技术来实现我上面描述的?
【问题讨论】:
-
如果没有运行时本身的支持,我无法想象这种技术可以在运行时执行此操作(而且我相信现在没有这样的支持)。然而,简单方法调用+比较可能产生任何显着效果的应用程序数量非常非常少。如果你有这样的超级性能关键应用程序——那么你不会调用
Debug——你至少会首先检查是否启用了调试,然后才会调用Debug。