gpt4 book ai didi

c# - ILogger (ASP.NET Core) 日志被调用甚至 IsEnabled 返回 false

转载 作者:行者123 更新时间:2023-12-02 17:40:52 25 4
gpt4 key购买 nike

我试图了解 IsEnabled 的目的ILogger 接口(interface)中的方法。我希望每次可以记录某些内容时都会自动调用该方法,但无论返回 IsEnabled 是什么,都会调用 Log 方法。

我应该检查 Log 方法中的 IsEnabled 吗?

    public bool IsEnabled(LogLevel logLevel)
{
return logLevel >= this.level;
}

public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
if (this.IsEnabled(logLevel)) //it seams that this is required ????
{
string s = formatter(state, exception);
string formatted = s.Replace("\r\n", "\r\n ");
Console.WriteLine(string.Format("{0,-15} {1,-5} - {2}", logLevel, eventId, formatted));
}
}

那么目的是什么以及谁(为什么)调用 IsEnabled。

最佳答案

IsEnabled 在传递参数时尤其重要。

没有 IsEnabled

logger.LogDebug("My debug message with {payload}", Serialize(myPayload));

在这种情况下,每次调用 LogDebug 时,myPayload 都会被序列化,无论您的日志级别设置如何。这可能在生产环境中造成不必要的影响,并可能导致意外错误。如果 Serialize 方法由于意外数据而失败怎么办?

使用 IsEnabled

if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("My debug message with {payload}", Serialize(myPayload));
}

在这种情况下,仅当您的设置中启用 LogDebug 时,myPayload 才会被序列化。

平衡方法

就我个人而言,我会跳过对 Log() 方法的“常量文本”调用的 IsEnabled 检查(例如,logger.LogDebug("constant string")),并且仅当我需要使用参数进行日志记录时,测试 IsEnabled

关于c# - ILogger (ASP.NET Core) 日志被调用甚至 IsEnabled 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44585112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com