如何使用 Serilog 应用程序洞察接收器设置最低日志级别

2023-12-07

我正在使用 Serilog 来记录应用程序见解,但我只获取要记录的日志级别警告、错误和严重。在 appsettings.json 中,我将最小日志级别设置为详细,这会使用文件和控制台接收器记录所有内容。

默认情况下,应用程序见解只能记录警告及以上级别。在代码中(在配置日志记录中),我可以添加一个过滤器来覆盖警告及以上的默认值。我更喜欢在应用程序设置中使用其他日志记录配置来执行此操作。

如何使用 appsettings 允许 Serilog 将所有级别记录到 Application Insights?

  • 我在应用程序洞察中收到一些日志,因此连接是 在职的。
  • 我在日志文件和控制台上看到所有日志级别。

在配置日志记录的地方,如果我添加日志级别文件(注释掉),我可以使其工作。我需要从应用程序设置开始工作。

host.ConfigureLogging(
                loggingBuilder =>
                {
                    var configuration = new ConfigurationBuilder()
                       .AddJsonFile("appsettings.json")
                       .Build();
                    var logger = new LoggerConfiguration()
                        .ReadFrom.Configuration(configuration)
                        .CreateLogger();
                    loggingBuilder.AddApplicationInsights();
                    loggingBuilder.AddSerilog(logger, dispose: true);
                    //loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
            
                }
            );

This is my code and the results: enter image description here

这是我的应用程序设置:

"Serilog": {
    "AllowedHosts": "*",
    "Enrich": [ "WithMachineName" ],
    "MinimumLevel": {
      "Default": "Verbose",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "fileSizeLimitBytes": "1048576",
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact , Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10",
          "path": "c:\\LogFiles\\Publisher\\Test1\\_log.txt",
          "retainedFileCountLimit": null,
          "rollingInterval": "Day",
          "rollOnFileSizeLimit": "true"
        }
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "restrictedToMinimumLevel": "Verbose",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ]
  },

这是我的测试结果:

enter image description here

我创建了我的 asp.net core mvc 应用程序,这是我的 appsettings.json:

{
  "AllowedHosts": "*",
  "Serilog": {
    "Using": [],
    "MinimumLevel": "Verbose",
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "restrictedToMinimumLevel": "Verbose",
          "outputTemplate": "{Timestamp:HH:mm:ss.fff zzz} [{Level}] {Message}  {NewLine}{Exception}"

        }
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "instrumentationKey": "instrument_key_here",
          "restrictedToMinimumLevel": "Verbose",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": {
      "Application": "Sample"
    }
  }
}

我的program.cs,添加读取配置代码并添加UseSerilog():

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;

namespace serilog_appsetting_file_appinsights
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                 .AddJsonFile("appsettings.json")
                 .Build();
            Log.Logger = new LoggerConfiguration()
                 .ReadFrom.Configuration(configuration)
                 .CreateLogger();

            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseSerilog();
    }
}

我的包裹:

<ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.17.0" />
    <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
    <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="3.1.0" />
  </ItemGroup>

我的控制器文件:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Serilog;
using serilog_appsetting_file_appinsights.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace serilog_appsetting_file_appinsights.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            Log.Verbose("serilog_verbose_info");
            Log.Debug("serilog_debug_info");
            Log.Information("serilog_information_info");
            Log.Warning("serilog_warning_info");
            Log.Error("serilog_error_info");
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

在本地主机中调试时,我们可以看到应用程序见解捕获这样的日志,并查看控制台日志

enter image description here enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Serilog 应用程序洞察接收器设置最低日志级别 的相关文章

随机推荐