Gur*_*ley 3 c# logging serilog asp.net-core
我正在使用 asp.net core(website) 和 Serilog 进行日志记录。
安装的 Nuget 包是
Serilog
Serilog.AspNetCore
Serilog.Extensions.Logging
Serilog.Extensions.Logging.File
Serilog.Settings.Configuration
Serilog.Sinks.File
Serilog.Sinks.RollingFile
Microsoft.Extensions.Logging
Run Code Online (Sandbox Code Playgroud)
Main.cs 文件中的设置是:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((WebHostBuilderContext, configurationBuilder) =>
{
configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
configurationBuilder.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true);
configurationBuilder.AddEnvironmentVariables();
})
.ConfigureLogging((hostingContext, loggingBuilder) =>
{
loggingBuilder.ClearProviders();
loggingBuilder.AddSerilog();
})
.UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)
什么工作:
在 Startup.cs 文件中,如果我编写以下代码,则会创建日志文件。在这里,我在代码本身中指定配置。
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
string logFilePath = Path.Combine(env.ContentRootPath, "Logs/ImportManager2-{Date}.txt");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(logFilePath)
.CreateLogger();
loggerFactory.AddSerilog();
--
--
}
Run Code Online (Sandbox Code Playgroud)
当我使用具有以下内容的 appsettings.json 文件时
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MyDatabaseLocal": "Server=_;Database=_;MultipleActiveResultSets=true;Connection Timeout=333;Integrated Security=SSPI",
"OtherDatabaseLocal": "Server=_;Database=_;MultipleActiveResultSets=true;Connection Timeout=333;Integrated Security=SSPI"
},
"Serilog": {
"MinimumLevel": "Debug",
"Override": {
"Microsoft": "Warning"
},
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"path": "Logs/MyProject.txt"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
并更改了 startup.cs 文件,例如
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Serilog"))
.CreateLogger();
loggerFactory.AddSerilog();
--
--
}
Run Code Online (Sandbox Code Playgroud)
在此之后没有创建文件。可能是什么问题呢。
以下调用并不完全符合您的期望:
.ReadFrom.Configuration(Configuration.GetSection("Serilog"))
Run Code Online (Sandbox Code Playgroud)
使用此扩展方法时,Serilog 期望Serilog 在您传递的配置中会有一个名为的部分。在您的示例中,您正在传递该Serilog部分本身,但随后它正在寻找该Serilog部分中的另一个部分。
将调用更新为 just pass through Configuration,如下所示:
.ReadFrom.Configuration(Configuration)
Run Code Online (Sandbox Code Playgroud)
Serilog 将找到您的Serilog部分并使用其中的设置。
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |