簡體   English   中英

Steeltoe Serilog 動態日志記錄不適用於 .NET 7

[英]Steeltoe Serilog Dynamic Logging not working with .NET 7

我正在嘗試使用 Steeltoe 設置 Serilog 動態日志記錄。 我正在使用 .NET 7. 我正在使用 Host Builder 添加功能。 下面的代碼示例使用主機生成器:

.AddDynamicSerilog((cfg, log) => log.ReadFrom.Configuration(cfg.Configuration))

我在這里的擴展中設置了一個斷點,但我的代碼沒有遇到這個斷點:

public static IHostBuilder AddDynamicSerilog(
    this IHostBuilder hostBuilder,
    Action<HostBuilderContext, LoggerConfiguration> configureLogger = null,
    bool preserveStaticLogger = false,
    bool preserveDefaultConsole = false)

鋼趾配置:

"Serilog": {
    "MinimumLevel": "Information",
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": { "path": "Logs/log.txt" }
      }
    ],
    "Properties": {
      "Application": "Test"
    }
  }

當我使用記錄器時,我的應用程序正在記錄,但它只是以常規格式記錄,沒有應用程序名稱或跟蹤擴展等。所以我假設我的配置沒有以某種方式被讀取? Serilog Dynamic Logging package 是否與 .NET 7 兼容? 還是有其他事情發生?

試過給出的例子。 日志記錄看起來不像是從設置文件中讀取或應用 Serilog 配置。 也不執行擴展代碼。

您可以在這里嘗試這個特定的示例: https://github.com/SteeltoeOSS/Samples/tree/main/Management/src/CloudFoundry

將目標更改為<TargetFramework.net7.0</TargetFramework>

我剛剛試過了,你可以在圖片中看到正在讀取的 Serilog 配置。 Serilog 調試視圖 請注意示例中 Steeltoe 等的版本(以幫助縮小問題范圍)。

至於調試 - 我們在我們的塊上啟用了源鏈接,因此您應該能夠通過在調試選項中啟用它來查看和調試Steeltoe代碼。 調試選項

我懷疑問題是 appsettings 中缺少outputTemplate 它需要包含"{Properties}" ,以便消息中包含作用域值。

  "Serilog": {
    "MinimumLevel": "Information",
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext}: {Properties} {NewLine} {EventId} {Message:lj}{NewLine}{Exception}"
        }
      },
      {
        "Name": "File",
        "Args": { "path": "Logs/log.txt" }
      }
    ],
    "Properties": {
      "Application": "Test"
    }
  }

我采取了以下步驟來重現該問題並使其正常工作:

  1. 在 Visual Studio 中:文件 > 新建 > 項目 > ASP.NET 核心 Web API
  2. 從 Package 管理器控制台:
     install-package Serilog.AspNetCore install-package Steeltoe.Extensions.Logging.DynamicLogger install-package Steeltoe.Extensions.Logging.DynamicSerilogCore install-package Steeltoe.Management.TracingCore
  3. 添加到 Program.cs:
     // Add services to the container. builder.AddDistributedTracincAspNetCore(); builder.AddDynamicSerilog((cfg, log) => log.ReadFrom.Configuration(cfg.Configuration)); builder.AddDynamicLogging();
  4. 將上面的部分添加到 appsettings.Development.json
  5. 運行應用程序

這會在我的控制台上打印以下行:

[14:13:08 INF] Microsoft.AspNetCore.Hosting.Diagnostics: {Protocol="HTTP/2", Method="GET", ContentType=null, ContentLength=null, Scheme="https", Host="localhost:7142", PathBase="", Path="/weatherforecast", QueryString="", RequestId="0HMNU1ISSN7T6:00000001", RequestPath="/weatherforecast", ConnectionId="0HMNU1ISSN7T6", Scope=[" [DynamicLoggingWebApi,52a92b64eb0209466ca872311bf309cc,e425a4b06ed50908,0000000000000000,true] "], Application="Test"}
 { Id: 1 } Request starting HTTP/2 GET https://localhost:7142/weatherforecast - -

從上面的行中,跟蹤信息是:

[DynamicLoggingWebApi,52a92b64eb0209466ca872311bf309cc,e425a4b06ed50908,0000000000000000,true]

希望有幫助!

順便說一下,我在進入源代碼時沒有遇到任何問題。 要設置 Visual Studio,請按照https://devblogs.microsoft.com/do.net/improving-debug-time-productivity-with-source-link/#enabling-source-link中的說明進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM