Asp.Net Core 2.1 的 Serilog 未从 appsettings.json 写入
Serilog with Asp.Net Core 2.1 not writing from appsettings.json
我正在尝试配置 Serilog
以从我的 ASP.NET Core 2 WebApi 中的 appsettings.json
文件中读取我的设置。
我在 appsetting.json
文件的根目录中有以下内容;
"Serilog": {
"Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Async", "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "File",
"Args": { "pathFormat": "Logs\Serilog\log.txt" },
"RollingInterval": "Day"
},
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "myconnectionstring",
"schemaName": "Schema",
"tableName": "Logs",
"batchPostingLimit": 1000,
"period": 30
}
}
]
}
}
]
}
在我的 Startup.cs
我有以下内容;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var log = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
loggerFactory.AddSerilog(log);
如果我 运行 以下内容,那么输出完美,所以我知道它会移动到应用程序设置;
var log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.MSSqlServer("connectionString", "Logs", schemaName:"Schema")
.WriteTo.File("Logs\Serilog\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
然后在我的 Program.cs
我有;
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
config.AddJsonFile(
x =>
{
x.Path = "appsettings.json";
x.Optional = true;
x.ReloadOnChange = true;
})
.AddJsonFile(
x =>
{
x.Path = "appsettings.{currentEnv}.json";
x.Optional = true;
x.ReloadOnChange = true;
})
)
.UseStartup<Startup>()
.Build();
请注意,appsettings.json 和特定环境目前都包含相同的数据。
我安装了以下版本的 Serilog;
Serilog 2.7.1
Serilog.spNetCore2.1.1
Serilog.Enrichers.Environment2.1.2
Serilog.Settings.Configuration 3.0.1
Serilog.Sinks.Async 1.3.0
Serilog.Sinks.File 4.0.0
Serilog.Sinks.MSSqlServer5.1.2
在您的 Program.cs 文件中试试这个:
UseStartup<Startup>()
.UseSerilog()
.Build();
这将告诉 HostBuilder 使用 Serilog 包。
我正在尝试配置 Serilog
以从我的 ASP.NET Core 2 WebApi 中的 appsettings.json
文件中读取我的设置。
我在 appsetting.json
文件的根目录中有以下内容;
"Serilog": {
"Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Async", "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "File",
"Args": { "pathFormat": "Logs\Serilog\log.txt" },
"RollingInterval": "Day"
},
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "myconnectionstring",
"schemaName": "Schema",
"tableName": "Logs",
"batchPostingLimit": 1000,
"period": 30
}
}
]
}
}
]
}
在我的 Startup.cs
我有以下内容;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var log = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
loggerFactory.AddSerilog(log);
如果我 运行 以下内容,那么输出完美,所以我知道它会移动到应用程序设置;
var log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.MSSqlServer("connectionString", "Logs", schemaName:"Schema")
.WriteTo.File("Logs\Serilog\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
然后在我的 Program.cs
我有;
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
config.AddJsonFile(
x =>
{
x.Path = "appsettings.json";
x.Optional = true;
x.ReloadOnChange = true;
})
.AddJsonFile(
x =>
{
x.Path = "appsettings.{currentEnv}.json";
x.Optional = true;
x.ReloadOnChange = true;
})
)
.UseStartup<Startup>()
.Build();
请注意,appsettings.json 和特定环境目前都包含相同的数据。
我安装了以下版本的 Serilog;
Serilog 2.7.1 Serilog.spNetCore2.1.1 Serilog.Enrichers.Environment2.1.2 Serilog.Settings.Configuration 3.0.1 Serilog.Sinks.Async 1.3.0 Serilog.Sinks.File 4.0.0 Serilog.Sinks.MSSqlServer5.1.2
在您的 Program.cs 文件中试试这个:
UseStartup<Startup>()
.UseSerilog()
.Build();
这将告诉 HostBuilder 使用 Serilog 包。