Vac*_*ano 2 c# interface .net-core asp.net-core
ILogger 接口有一个必需的方法IsEnabled. 我正在努力理解该方法在界面中的用途。(重要提示:我不关心实现类,只关心接口。)
.Net Core 在正常日志记录期间似乎不会调用它。
这个答案似乎表明开发人员在决定登录时可以使用它。
但这没有意义。作为开发人员,我可以在实现 ILogger 接口的类中创建我需要的任何方法,以便决定是否要记录。如果实现该接口的类不需要提供 IsEnabled,那么强制所有实现者都提供它是没有意义的。
接口IsEnabled中的is 的目的是ILogger什么?
有时计算一些传递的参数可能会很昂贵。因此,调用者可以根据需要过滤掉工作:
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("The message: {value}", DoSomethingCostlyHere());
}
Run Code Online (Sandbox Code Playgroud)
另一种常见模式是将更多详细信息(例如 PII 或其他敏感数据)放入不会在生产中出现的调试消息中:
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("'{username}' logged in", username);
}
else
{
logger.LogInformation("User logged in");
}
Run Code Online (Sandbox Code Playgroud)
其他日志框架也有这个:NLog、Serilog、log4net等。
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |