[英]Add custom ILogger to ASP.NET Core Web API
我有一個中央項目,它為子項目生成所有記錄器。 (並做了很多其他對我的問題來說不是必需的東西)
其中一個子項目是 ASP.NET Web API。 現在我想將由 Logger Factory(見下文)生成的 Logger 添加到 WebApplication。 問題是當前版本的 WebApplication 不接受 ILoggers...
(我用的是.Net 6)
以下函數生成我的記錄器工廠:
private ILoggerFactory CreateLoggerFactory()
{
IConfiguration configSerilog = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, false)
.Build();
Serilog.Core.Logger serilogLogger = new LoggerConfiguration()
.ReadFrom.Configuration(configSerilog)
.Enrich.WithProperty("ComponentShortcuts", _componentShortcuts)
.CreateLogger();
ILoggerFactory loggerFactory = new LoggerFactory()
.AddSerilog(serilogLogger);
return loggerFactory;
}
我現在唯一能做的就是刪除默認的記錄器:
var builder = WebApplication.CreateBuilder();
builder.Logging.ClearProviders();
問題是我不知道如何添加我的 Logger,因為沒有AddLogger()
函數。 (我不知道如何轉換 ILogger,或者我是否可以使用 Logger Factory 生成其他可以幫助我的東西。)
我希望你能幫幫我:)
所以我在 2 天前登錄 .net 6 web api 時遇到了同樣的問題。 我找到了一個對我有用的解決方案,即; 通過使用 LoggerConfiguration。 盡管我仍在尋找通過 LoggerFactory 來完成此操作的方法,但我會在弄清楚后立即發布。 到那時我希望這對你有幫助。
這是我的代碼;
程序.cs
builder.Logging.ClearProviders();
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
//.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
//.MinimumLevel.Override("Microsoft.AspNetCore",LogEventLevel.Error)
//.MinimumLevel.Override("Serilog", LogEventLevel.Error)
.Enrich.FromLogContext()
.Enrich.WithClientIp("CF-Connecting-IP")
.Enrich.WithClientAgent()
.CreateLogger();
Log.Logger = logger;
builder.Logging.AddSerilog(logger);
builder.Host.UseSerilog();
然后添加中間件
app.UseSerilogRequestLogging();
appsettings.json(我也登錄到控制台和 Sql Server(如果你想這樣做。))
"Serilog": {
"Using": [ "Serilog.Enrichers.ClientInfo", "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Warning",
"System": "Warning",
"System.Net.Http.HttpClient": "Warning"
}
},
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithClientIp",
"WithClientAgent",
{
"Name": "WithClientIp",
"Args": {
"xForwardHeaderName": "CF-Connecting-IP"
}
}
],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "",
"sinkOptionsSection": {
"tableName": "TableName",
"autoCreateSqlTable": true
},
"restrictedToMinimumLevel": "Information",
"columnOptionsSection": {
"primaryKeyColumnName": "",
"addStandardColumns": [ "LogEvent", "SourceContext" ],
"additionalColumns": [
{
"ColumnName": "ClientIPAddress",
"PropertyName": "UserIp",
"DataType": "nvarchar"
}
]
}
}
}
]
}
如果您有任何疑問,請隨時告訴我。 並且不要忘記安裝相關的 nuget 包。
祝一切順利:! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.