gpt4 book ai didi

c# - 如何使用 ASP.NET Core 日志记录延迟记录?

转载 作者:行者123 更新时间:2023-12-03 17:49:01 25 4
gpt4 key购买 nike

假设这样的场景:

[Route("api/test")]
public class TestController
{
private readonly ILogger<TestController> logger;

public TestController(ILogger<TestController> logger)
{
this.logger = logger;
}

[HttpPut]
public void Put(Guid id, [FromBody]FooModel model)
{
logger.LogInformation($"Putting {id}");
logger.LogTrace("Putting model {0}", Newtonsoft.Json.JsonConvert.SerializeObject(model));
try
{
// Omitted: actual PUT operation.
}
catch (Exception ex)
{
logger.LogError("Exception {0}", ex);
}
}
}

public class FooModel
{
string Bar { get; set; }
}

在这种情况下, LogInformation调用将触发 string.Format打电话,更糟糕的是, LogTrace行将触发 一个 SerializeObject打电话,不管LogLevel .这似乎相当浪费。

Logging API 中是否有允许更懒惰的方法的地方?我能想到的唯一解决方法是覆盖 ToString在模型上创建一个非常详细的表示,并跳过使用 JsonConvert.SerializeObject作为工具。

最佳答案

ILogger接口(interface)提供IsEnabled方法:

if (logger.IsEnabled(LogLevel.Information))
{
logger.LogInformation($"Putting {id}");
}

if (logger.IsEnabled(LogLevel.Trace))
{
logger.LogTrace("Putting model {0}", Newtonsoft.Json.JsonConvert.SerializeObject(model));
}

您将在 GitHub 上找到默认实现: https://github.com/aspnet/Extensions/blob/master/src/Logging/Logging/src/Logger.cs#L53

关于c# - 如何使用 ASP.NET Core 日志记录延迟记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44227712/

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