簡體   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