[英]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.