我想添加 Serilog 进行日志记录,并将日志写入
appsettings.json
配置文件中定义的基于文本文件的设置。
自从使用 .NET Core 8 以来,我发现了挑战
var builder = Host.CreateApplicationBuilder(args);
我得到最多使用的样本
var builder = Host.CreateDefaultBuilder(args);
我想在
appsettings.json
中定义完整的设置,工作人员服务必须从中读取并采取相应的行为。
{
"Serilog": {
"WriteTo": [
{ "Name": "File", "Args": { "path": "log.txt", "rollingInterval": "Day" } }
]
}
}
请帮我提供注册代码的
appsettings.json
和program.cs
的配置。
找到解决方案
builder.Services.AddSerilog(loggingBuilder => loggingBuilder
.WriteTo.File(logFilePath, rollingInterval: RollingInterval.Day,
fileSizeLimitBytes: 10 * 1024 * 1024) // Limit each log file to 10 MB
);
这里我只想记录信息、警告。我尝试了“Where”,但它说该方法不可用,尽管我有 serilog 3.0
此外,我还添加了自定义记录器来通过 proc 记录 SQL Server 数据库表的错误和关键信息。我做了这个改变,但两者都不起作用。当两者都启用时,它会写入文件。如果我评论 serilog 它会写入 sql server 表。请指教
builder.Services.AddSerilog(loggingBuilder =>loggingBuilder
.WriteTo.File(logFilePath, rollingInterval: RollingInterval.Day,
fileSizeLimitBytes: 10 * 1024 * 1024) // Limit each log file to 10 MB
);
var connectionString = Configuration.GetSection("ConnectionStrings");
var sqlServerMinimumLogLevel = Configuration.GetValue<LogLevel>("Logging:SqlServerMinimumLevel", LogLevel.Error); // Default to Error
builder.Services.AddLogging(configure =>
{
configure.AddProvider(new SqlServerLoggerProvider(connectionString.Value, sqlServerMinimumLogLevel) ); // Assuming custom provider implemented
});
分配
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();
Log.Logger = logger;
这里Log.Logger是全局共享的记录器。