gpt4 book ai didi

asp.net-core - 如何防止NLog处理引用库中的日志语句?

转载 作者:行者123 更新时间:2023-12-03 07:41:28 26 4
gpt4 key购买 nike

每当我们的API中发生错误时,我们都会因一个错误而收到多封电子邮件。根据日志消息;我们可以看到这些其他电子邮件似乎正在生成,因为各种Microsoft库正在调用类似_logger.LogError以及在处理错误时发生的我们自己的_ logger.LogError之类的东西。

例如,当数据库超时时,我们会从这些不同的类中看到4封电子邮件:

  • Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware
  • Microsoft.EntityFrameworkCore.Database.Command
  • Microsoft.EntityFrameworkCore.Query
  • Web.Controllers.ErrorController(我们自己的异常处理程序;这是
    我们想要看到的唯一一个)

  • 最后一个是唯一具有我们自己的错误格式并带有有用信息的信息,例如当前用户等。其他仅包含堆栈跟踪,该跟踪已在我们自己格式化的电子邮件中。

    我们无法确定这些其他日志消息来自何处。但是我最想起的是,在Microsoft的库中,它们正在调用 _logger.LogError(),而我们自己的NLog配置正在处理 LogError的所有实例;而不是仅仅处理我们自己的。

    我们如何防止其他日志语句被记录,尤其是通过电子邮件发送给我们?

    这是我们在Program.cs中的设置:
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .ConfigureLogging(logging =>
    {
    logging.ClearProviders();
    logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
    })
    .UseNLog();

    最佳答案

    您可以在.NET Core中对此进行过滤-因为您使用的是Microsoft.Extensions.Logging集成,而Microsoft则向NLog和中发送消息。

    在.NET Core中配置

    修改您的配置,例如appsettings.json。例如,所有Microsoft。*至少有一个错误,Microsoft.EntityFrameworkCore。*至少有一个警告。

    {
    "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
    "Default": "Trace",
    "Microsoft": "Error",
    "Microsoft.EntityFrameworkCore": "Warning"
    }
    }
    }

    注意,这不是特定于NLog的,因此您不能使用NLog级别名称。 possible level names

    阅读有关此方法的更多信息 here

    配置NLog

    或者,您可以在NLog配置中进行配置。

    在NLog.config中,编辑 <rules>。这些规则从上到下进行处理。
  • 您可以使用name属性过滤 namespace (允许使用*)
  • 没有writeTo属性,日志将被丢弃
  • 如果规则具有final="true"且与事件匹配,则不会处理下一个规则。

  • 例如:

    <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxlevel="Info" final="true" /> <!-- BlackHole without writeTo -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
    </rules>

    您可以阅读有关nlog.config规则 here的信息。

    使用代码中的相同方法也是可行的,请参见 here

    关于asp.net-core - 如何防止NLog处理引用库中的日志语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60516402/

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