繁体   English   中英

将自定义 ILogger 添加到 ASP.NET Core Web API

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM