[英]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 配置。 請注意示例中 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"
}
}
我采取了以下步驟來重現該問題並使其正常工作:
install-package Serilog.AspNetCore install-package Steeltoe.Extensions.Logging.DynamicLogger install-package Steeltoe.Extensions.Logging.DynamicSerilogCore install-package Steeltoe.Management.TracingCore
// Add services to the container. builder.AddDistributedTracincAspNetCore(); builder.AddDynamicSerilog((cfg, log) => log.ReadFrom.Configuration(cfg.Configuration)); builder.AddDynamicLogging();
這會在我的控制台上打印以下行:
[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.