【问题标题】:Serilog ReadFrom ConfigurationSerilog ReadFrom 配置
【发布时间】:2018-08-31 13:04:55
【问题描述】:

我正在尝试使用 Serilog.Settings.Configuration 预发布 NuGet 包从 appsettings.json 加载我的 Serilog 配置。但是,当我使用 Configuration.GetSection 加载它时,该值继续返回为 null。

这是我的 Program.cs 文件中的内容:

    return WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .ConfigureLogging(
        (hostingContext, loggingBuilder) =>
        {
            loggingBuilder.ClearProviders();
            loggingBuilder.AddSerilog(
                new LoggerConfiguration()
                    .ReadFrom.ConfigurationSection(hostingContext.Configuration.GetSection("Serilog"))
                    .CreateLogger()
            );
        }
    );

这是我的 appsettings.json 文件中的内容:

    {
    "Serilog": {
        "Using": [ "Serilog.Sinks.MSSqlServer" ],
        "MinimumLevel": {
            "Default": "Verbose",
            "Override": {
                "Microsoft": "Verbose",
                "System": "Verbose",
                "Microsoft.AspNetCore.Authentication": "Verbose"
            }
        },
        "WriteTo": [
            {
                "Name": "MSSqlServer",
                "Args": {
                    "connectionString": "*my_connectionString*",
                    "tableName": "ErrorLog"
                }
            }
        ]
    }}

已安装 NuGet 包:

  • Microsoft.AspNetCore.App v2.1.1
  • Serilog v2.7.1
  • Serilog.AspNetCore v2.1.1
  • Serilog.Extensions.Logging v2.0.2
  • Serilog.Settings.Configuration v3.0.0-dev-00119
  • Serilog.Sinks.MSSqlServer v5.1.2

【问题讨论】:

    标签: logging asp.net-core .net-core serilog


    【解决方案1】:

    我是这样配置的:

    return WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration))
                .Build();
    

    默认情况下Serilog 在配置中查找Serilog 部分

    【讨论】:

    【解决方案2】:

    我是这样配置的

         public static void Main(string[] args)
         {
            var _config = new ConfigurationBuilder()
                        .AddJsonFile("loggerconfig.json")//mantained separate 
         config file.
                        .Build();
            Log.Logger = new LoggerConfiguration()
                        .ReadFrom.Configuration(_config)
                        .CreateLogger();
            CreateWebHostBuilder(args).Build().Run();
        }
    
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseSerilog()
                .UseStartup<Startup>();
    

    根据 Serilog,这是更好的方法。

    【讨论】:

      【解决方案3】:

      这是我从 logging.json 中读取的方法:

                  var builder = new ConfigurationBuilder()
                      .AddJsonFile(path: "logging.json", optional: false, reloadOnChange: true);
      
                  var config = builder.Build();
                  Log.Logger = new LoggerConfiguration()
                              .Enrich.With(new EventBusLogEnricher())
                              .ReadFrom.Configuration(config)
                              .CreateLogger();
      

      【讨论】:

        猜你喜欢
        • 2020-11-23
        • 2019-08-27
        • 2017-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多