结构化日志的好处

  • 易于检索
  • 易于分析统计

场景举例

  • 实现日志告警
  • 实现上下文的关联
  • 实现追踪系统集成

示例

首先我们新建Web程序👉选择API模板
改造Program

  1. using Microsoft.AspNetCore.Hosting;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.Hosting;
  4. using Serilog;
  5. using Serilog.Formatting.Compact;
  6. using System;
  7. using System.IO;
  8. namespace LoggingSerilogDemo
  9. {
  10. public class Program
  11. {
  12. public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
  13. .SetBasePath(Directory.GetCurrentDirectory())
  14. .AddJsonFile("appsettings.json", false, true)
  15. .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json")
  16. .AddEnvironmentVariables()
  17. .Build();
  18. public static int Main(string[] args)
  19. {
  20. Log.Logger = new LoggerConfiguration()
  21. // 将配置的值传递给Serilog的提供程序
  22. .ReadFrom.Configuration(Configuration)
  23. .MinimumLevel.Debug()
  24. .Enrich.FromLogContext()
  25. .WriteTo.Console(new RenderedCompactJsonFormatter())
  26. .WriteTo.File(formatter: new CompactJsonFormatter(), "Logs\\Myapp.txt", rollingInterval: RollingInterval.Day)
  27. .CreateLogger();
  28. try
  29. {
  30. Log.Information("Starting wen host");
  31. CreateHostBuilder(args).Build().Run();
  32. return 0;
  33. }
  34. catch (Exception exception)
  35. {
  36. Log.Fatal(exception, "Host terminated unexpectedly");
  37. return 1;
  38. }
  39. finally
  40. {
  41. Log.CloseAndFlush();
  42. }
  43. }
  44. public static IHostBuilder CreateHostBuilder(string[] args) =>
  45. Host.CreateDefaultBuilder(args)
  46. .ConfigureWebHostDefaults(webBuilder =>
  47. {
  48. webBuilder.UseStartup<Startup>();
  49. })
  50. .UseSerilog(dispose: true);
  51. }
  52. }

修改appsetting.json配置文件

  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Information",
  5. "Microsoft": "Warning",
  6. "Microsoft.Hosting.Lifetime": "Information"
  7. }
  8. },
  9. "Serilog": {
  10. "MinimumLevel": {
  11. "Default": "Information",
  12. "Override": {
  13. "Microsoft": "Error",
  14. "System": "Information"
  15. }
  16. }
  17. },
  18. "AllowedHosts": "*"
  19. }