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

im1*_*ike 2 c# serilog asp.net-core

我正在尝试添加SeriLog设置,例如最低日志级别和配置文件中的滚动文件路径。标准是这样硬编码它们:

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();
}
Run Code Online (Sandbox Code Playgroud)

基本上,我需要能够从Startup构造函数中的appsettings.json访问值。像这样:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
Run Code Online (Sandbox Code Playgroud)

Configuration.GetValue在另一篇SO文章中找到了该语法,但始终返回null

Moh*_*our 5

如果AppSettings部分是这样的:

"AppSettings": {
    "RollingFilePath": "..."
},
Run Code Online (Sandbox Code Playgroud)

然后更改.:

.WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings:RollingFilePath"))
Run Code Online (Sandbox Code Playgroud)

或使用这个

.WriteTo.RollingFile(Configuration["AppSettings:RollingFilePath"])
Run Code Online (Sandbox Code Playgroud)