C# 如何在.NET Core中的启动类构造函数中访问AppSettings

C# 如何在.NET Core中的启动类构造函数中访问AppSettings,c#,asp.net-core,serilog,C#,Asp.net Core,Serilog,我正在尝试添加SeriLog设置,比如min log level和从配置文件滚动文件路径。标准是这样硬编码: public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnC

我正在尝试添加SeriLog设置,比如min log level和从配置文件滚动文件路径。标准是这样硬编码:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
        .CreateLogger();
}
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
"AppSettings": {
    "RollingFilePath": "..."
},
{
   "Logging": {
   "IncludeScopes": false,
   "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
      }
   }
}
var IncludeScopes = Configuration.GetValue<bool>("Logging:IncludeScopes", true);
基本上,我需要能够从启动构造函数中的appsettings.json访问值。大概是这样的:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
        .CreateLogger();
}
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
"AppSettings": {
    "RollingFilePath": "..."
},
{
   "Logging": {
   "IncludeScopes": false,
   "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
      }
   }
}
var IncludeScopes = Configuration.GetValue<bool>("Logging:IncludeScopes", true);
Log.Logger=new LoggerConfiguration()
.MinimumLevel.Is((LogEventLevel)枚举解析(typeof(LogEventLevel),
Configuration.GetValue(“AppSettings.MinimumLoggingLevel”))
.WriteTo.RollingFile(Configuration.GetValue(“AppSettings.RollingFilePath”))

我在另一篇SO帖子中找到了
Configuration.GetValue
语法,但如果
AppSettings
部分如下所示,它总是返回
null

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
        .CreateLogger();
}
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
"AppSettings": {
    "RollingFilePath": "..."
},
{
   "Logging": {
   "IncludeScopes": false,
   "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
      }
   }
}
var IncludeScopes = Configuration.GetValue<bool>("Logging:IncludeScopes", true);
然后将
更改为

.WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings:RollingFilePath"))

My appsettings.json如下所示:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
        .CreateLogger();
}
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
"AppSettings": {
    "RollingFilePath": "..."
},
{
   "Logging": {
   "IncludeScopes": false,
   "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
      }
   }
}
var IncludeScopes = Configuration.GetValue<bool>("Logging:IncludeScopes", true);
要访问某个值,我可以使用如下内容:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
        .CreateLogger();
}
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
"AppSettings": {
    "RollingFilePath": "..."
},
{
   "Logging": {
   "IncludeScopes": false,
   "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
      }
   }
}
var IncludeScopes = Configuration.GetValue<bool>("Logging:IncludeScopes", true);
var IncludeScopes=Configuration.GetValue(“记录:IncludeScopes”,true);