gpt4 book ai didi

c# - Serilog : RollingFile is not working in asp. 网络核心与 'appsettings.json'

转载 作者:行者123 更新时间:2023-12-04 02:47:16 25 4
gpt4 key购买 nike

我正在使用 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

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>();
}

什么是工作:

在 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();

--
--
}

当我使用包含以下内容的 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"
}
}
]
}
}

并像这样更改了 startup.cs 文件

public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{

Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Serilog"))
.CreateLogger();

loggerFactory.AddSerilog();
--
--
}

在此之后没有创建文件。可能是什么问题呢。

最佳答案

以下调用并不完全符合您的预期:

.ReadFrom.Configuration(Configuration.GetSection("Serilog"))

使用此扩展方法时,Serilog 期望在您通过的配置中有一个名为Serilog 的部分。在您的示例中,您正在传递 Serilog 部分本身,但随后它正在寻找另一个 Serilog 部分在其中

更新调用以仅通过 Configuration,如下所示:

.ReadFrom.Configuration(Configuration)

Serilog 将找到您的 Serilog 部分并使用其中的设置。

关于c# - Serilog : RollingFile is not working in asp. 网络核心与 'appsettings.json',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56801667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com