为什么 Serilog 不写入 ASP.Net 核心应用程序中的日志文件?
Why doesn't Serilog write to log file in ASP.Net core app?
我正在尝试在我的 ASP.Net 核心应用程序中使用 Serilog,但无法使其正常工作。在我的 Program.cs 中添加 .UseSerilog() 后,通常转到控制台屏幕的消息就会消失,并且不会创建任何日志文件。以下是我启用 Serilog 的方法:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
这是我的应用程序设置:
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
据我了解,默认情况下,日志文件似乎会写入 VS.net 项目下的文件夹“logs”(至少从示例中看起来是这样)我看着)。我想念什么?
配置记录到文件
在 ASP.NET Core 中配置 Serilog 以更改 Serilog 设置块中的 appsettings.json 文件以包含另一个接收器,一个文件,它将创建一个带有文件接收器的 Serilog 记录器来写入日志详细信息文件:
"AllowedHosts": "*",
"Serilog": {
"MinimumLevel": "Information",
"Override": {
"Microsoft.AspNetCore": "Warning"
},
"WriteTo": [
{
"Name": "Console "
},
{
"Name": "File",
"Args": {
"path": "Serilogs\AppLogs.log",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
}
}
]
}
}
如上所示,文件接收者需要一个参数,其中我们需要指定日志文件名和文件路径。此路径可以是绝对路径或相对路径。在这里,我指定了一个相对路径,这将在应用程序文件夹中创建一个文件夹serilogs,并写入该文件夹中的文件AppLogs.log。
然后在startup.cs中添加代码,在构造函数中读取这些Serilog设置,如下图:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
}
然后更改program.cs中的代码,指定Host Builder在ASP.NET Core中使用Serilog而不是默认的logger:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
然后运行项目,生成日志记录:
具体参考文档:
https://procodeguide.com/programming/aspnet-core-logging-with-serilog/
我正在尝试在我的 ASP.Net 核心应用程序中使用 Serilog,但无法使其正常工作。在我的 Program.cs 中添加 .UseSerilog() 后,通常转到控制台屏幕的消息就会消失,并且不会创建任何日志文件。以下是我启用 Serilog 的方法:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
这是我的应用程序设置:
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
据我了解,默认情况下,日志文件似乎会写入 VS.net 项目下的文件夹“logs”(至少从示例中看起来是这样)我看着)。我想念什么?
配置记录到文件
在 ASP.NET Core 中配置 Serilog 以更改 Serilog 设置块中的 appsettings.json 文件以包含另一个接收器,一个文件,它将创建一个带有文件接收器的 Serilog 记录器来写入日志详细信息文件:
"AllowedHosts": "*",
"Serilog": {
"MinimumLevel": "Information",
"Override": {
"Microsoft.AspNetCore": "Warning"
},
"WriteTo": [
{
"Name": "Console "
},
{
"Name": "File",
"Args": {
"path": "Serilogs\AppLogs.log",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
}
}
]
}
}
如上所示,文件接收者需要一个参数,其中我们需要指定日志文件名和文件路径。此路径可以是绝对路径或相对路径。在这里,我指定了一个相对路径,这将在应用程序文件夹中创建一个文件夹serilogs,并写入该文件夹中的文件AppLogs.log。
然后在startup.cs中添加代码,在构造函数中读取这些Serilog设置,如下图:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
}
然后更改program.cs中的代码,指定Host Builder在ASP.NET Core中使用Serilog而不是默认的logger:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
然后运行项目,生成日志记录:
具体参考文档:
https://procodeguide.com/programming/aspnet-core-logging-with-serilog/