如何在 AspNetCore 2.2 NLog 中关闭 Microsoft 日志

Z.C*_*hen 3 nlog .net-core asp.net-core

以下是我的日志

[2019-05-07 15:55:38.4270][PC-20170829ROEW][信息]我记录的日志

[2019-05-07 15:55:38.4929][PC-20170829ROEW][Info] 路线与 {action = >"Get",controller = "Values"} 匹配。执行动作 >QunarFlight.Web.Controllers.ValuesController.Get (QunarFlight.Web)

[2019-05-07 15:55:38.5798][PC-20170829ROEW][Info] 执行操作方法 >QunarFlight.Web.Controllers.ValuesController.Get (QunarFlight.Web) - 验证 >state: Valid

[2019-05-07 15:55:38.6066][PC-20170829ROEW][Info]执行操作方法> QunarFlight.Web.Controllers.ValuesController.Get(QunarFlight.Web),返回>结果Microsoft.AspNetCore.Mvc.ObjectResult 22.6363 毫秒。

[2019-05-07 15:55:38.6066][PC-20170829ROEW][Info] 执行 ObjectResult,>写入“System.String[]”类型的值。

我想关闭所有Microsoft默认日志(最后四条记录),只保留我记录的日志(第一条记录)。我修改 appsettings.json 以下内容

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore.Hosting": "Warning",
    "Microsoft.AspNetCore.Routing": "Warning",
    "Microsoft.AspNetCore.Mvc": "Warning"
 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我记录的日志将不会输出。如果我删除“Microsoft.AspNetCore.Mvc”:“警告”我记录的日志将被输出。我应该如何修改它?

应用程序设置.json

"Logging": {
   "LogLevel": {
     "Default": "Information",
     "Microsoft.AspNetCore.Hosting": "Warning",
     "Microsoft.AspNetCore.Routing": "Warning",
     "Microsoft.AspNetCore.Mvc": "Warning"
}
Run Code Online (Sandbox Code Playgroud)

在Startup.cs中配置

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        env.ConfigureNLog("NLog.config");
        loggerFactory.AddNLog();
        app.UseMiddleware<CustomMiddleware>();
        app.UseMvc();
    }
Run Code Online (Sandbox Code Playgroud)

程序.cs

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((builderContext, config) =>
        {
            config.AddJsonFile("appsetting.json", optional: true, reloadOnChange: true)
             .AddJsonFile($"appsettings.{builderContext.HostingEnvironment.EnvironmentName}.json", true, true)
             ;
        })
            .UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)

Rol*_*sen 5

如果您已将${logger}文件布局包含在 NLog.config 中,那么帮助您设置记录器过滤器会更容易。

但我在谷歌上发现了这个随机线索:

Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor:Information: Executing ObjectResult
Run Code Online (Sandbox Code Playgroud)

所以我想你需要将 MEL-Config 更改为:

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore.Hosting": "Warning",
    "Microsoft.AspNetCore.Infrastructure": "Warning",
    "Microsoft.AspNetCore.Routing": "Warning",
    "Microsoft.AspNetCore.Mvc": "Warning"
 }
Run Code Online (Sandbox Code Playgroud)

人们甚至可以考虑这样做:

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning"
 }
Run Code Online (Sandbox Code Playgroud)

请注意,NLog v5将自身排除在 Microsoft LoggerFactory 过滤之外。相反,可以在 NLog.config 中使用(也可以在appsettings.jsonfinalMinLevel=中配置):

Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor:Information: Executing ObjectResult
Run Code Online (Sandbox Code Playgroud)