为什么 IsEnabled 是 ILogger 接口的一部分?
Why is IsEnabled part of the ILogger Interface?
ILogger 接口有一个必需的方法IsEnabled
。我正在努力理解界面中该方法的用途。 (重要说明:我不关心实现 class,只是接口。)
.Net Core 正常记录时好像没有调用。
这个似乎表明它是供开发人员在决定登录时使用的。
但这没有意义。作为开发人员,我可以在实现 ILogger 接口的 class 中创建我需要的任何方法,以决定是否要记录。如果实现接口的 class 不需要提供 IsEnabled,则强制所有实现者都实现它是没有意义的。
ILogger
界面中 IsEnabled
的用途是什么?
有时计算传递的某些参数的成本可能很高。因此,调用者可以根据需要过滤掉工作:
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("The message: {value}", DoSomethingCostlyHere());
}
另一种常见模式是将更多详细信息(例如 PII 或其他敏感数据)放入不会在生产中显示的调试消息中:
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("'{username}' logged in", username);
}
else
{
logger.LogInformation("User logged in");
}
ILogger 接口有一个必需的方法IsEnabled
。我正在努力理解界面中该方法的用途。 (重要说明:我不关心实现 class,只是接口。)
.Net Core 正常记录时好像没有调用。
这个
但这没有意义。作为开发人员,我可以在实现 ILogger 接口的 class 中创建我需要的任何方法,以决定是否要记录。如果实现接口的 class 不需要提供 IsEnabled,则强制所有实现者都实现它是没有意义的。
ILogger
界面中 IsEnabled
的用途是什么?
有时计算传递的某些参数的成本可能很高。因此,调用者可以根据需要过滤掉工作:
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("The message: {value}", DoSomethingCostlyHere());
}
另一种常见模式是将更多详细信息(例如 PII 或其他敏感数据)放入不会在生产中显示的调试消息中:
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("'{username}' logged in", username);
}
else
{
logger.LogInformation("User logged in");
}