【发布时间】:2019-04-26 05:42:27
【问题描述】:
我目前正在开发一个 ASP.NET Core 2.1 应用程序,我使用 Serilog 进行日志记录。我想在运行时为我的 Serilog 实现重新加载应用程序设置文件。
我的目标是在运行时更改日志级别,例如我写入 minimumLevel Debug 而不是 Information 并保存文件。我想触发设置的实时重新加载。我的appsettings.json 看起来像这样:
{
"serilog": {
"using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
"minimumLevel": "Information",
"writeTo": [
{
"name": "File",
"args": {
"fileSizeLimitBytes": 256000000,
"retainedFileCountLimit": 62,
"rollingInterval": "Day",
"rollOnFileSizeLimit": true,
},
{
"name": "Console",
}
]
}
}
在我的 Program.cs 中,我使用标志 reloadOnChange: true 加载设置。
public class Program
{
public static readonly ServiceSettings Settings = new ServiceSettings();
public static void Main(string[] args)
{
//...
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(Path.GetFullPath(CoreServiceBase.Instance.ConfigFilePath), optional: false, reloadOnChange: true)
.AddCommandLine(args)
.Build();
config.Bind(Settings);
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((hostingContext, loggerConfiguration) =>
loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration))
.UseConfiguration(config);
}
}
我的启动看起来像这样:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// ...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// Custom application logging
ApplicationLogging.LoggerFactory = loggerFactory;
// ...
}
}
如果我以某种方式更改了 appsettings.json,您是否知道如何在运行时重新加载 Serilog 配置。 => appsettings.json 的实时重新加载。
谢谢!!
【问题讨论】:
-
我相信你在启动过程中阅读了配置文件。您可以引入某种中间件,它会在每个请求上读取您的配置文件,但这会增加延迟。值得吗?
标签: c# json logging .net-core serilog