由于最近引入了 Program.cs 启动代码的新结构,文档让我有点困惑。
Serilog.AspNetCore
示例和Serilog.Sentry
示例中,他们在.UseSerilog()
上使用WebHostBuilder
。我找不到这个方法。
这是我尝试过的:
using Serilog;
var builder = WebApplication.CreateBuilder(args);
// adding services...
builder.Logging.AddSerilog(); // <- is this even necessary?
var app = builder.Build();
app.UseSerilogRequestLogging();
// configure request pipeline
app.Run();
但是我如何/在哪里配置接收器,例如调试、控制台、哨兵……?我觉得文档有点过时,或者我只是有点盲目。
您需要确保安装了以下软件包:
.UseSerilog
扩展方法。如果你有Serilog.AspNetCore包,则不需要显式包含它)那么你需要一个
using
:
using Serilog;
这应该允许您通过
.UseSerilog
访问 builder.Host
:
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
您可以使用不同的重载来获取托管上下文、服务和配置。从那里您可以配置接收器等:
builder.Host.UseSerilog((hostContext, services, configuration) => {
configuration.WriteTo.Console();
});
我使用以下代码片段来解决该问题。我将其添加到 Program.cs
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();
builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logs/rumble-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
//串行日志 Log.Logger = new LoggerConfiguration()
.WriteTo.File(new JsonFormatter(),@"logs\log-.txt", rollingInterval: RollingInterval.Hour)
.MinimumLevel.Error()
.WriteTo.Console(new JsonFormatter())
.CreateLogger();
builder.Host.UseSerilog(Log.Logger); var app = builder.Build();