我正在嘗試使用 Serilog 登錄我的 .NET 專案,但我注意到錯誤沒有寫入資料庫。我打開了 Serilog 的 SelfLog,這是出現的錯誤:
2022-11-01T15:58:26.9744639Z Unable to write 1 log events to the database due to following error: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
這是我在 Program.cs 中為 Serilog 設定的:
var columnOptions = new ColumnOptions();
columnOptions.Store.Remove(StandardColumn.Properties);
columnOptions.Store.Remove(StandardColumn.MessageTemplate);
columnOptions.TimeStamp.NonClusteredIndex = true;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Config)
.Enrich.FromLogContext()
.Enrich.WithExceptionDetails()
.WriteTo.Console()
.WriteTo.MSSqlServer(
connectionString: Config.GetSection("DbConfiguration")["ConnString"],
sinkOptions: new MSSqlServerSinkOptions
{
TableName = Config.GetSection("Serilog")["TableName"],
SchemaName = "dbo",
AutoCreateSqlTable = false,
BatchPeriod = TimeSpan.FromMilliseconds(5)
},
columnOptions: columnOptions
)
.CreateLogger();
我已經確認我提供給 Serilog 的連接字串與我用來正常訪問資料庫的連接字串相同,并且我正在手動創建表,但是即使我將其設定為 true 并讓 Serilog 自動創建它,它拋出關于無法登錄的相同錯誤。我在網上的其他頁面上找到了關于此錯誤的類似版本,但我找不到涉及 Serilog 的版本,并且其他頁面與我正在做的事情無關。
有人可以幫助我了解發生了什么嗎?
uj5u.com熱心網友回復:
從 Serilog.Sinks.MSSqlServer v5 開始,它使用Microsoft.Data.SqlClient而不是 System.Data.SqlClient 與 SQL Server 對話。從 Microsoft.Data.SqlClient v4 開始默認啟用加密,并驗證用于加密的證書的有效性。你有幾個選擇:
- 為您的 SQL Server 實體提供一個有效的證書 - 或讓您的機器信任該證書
- 使用舊版本的 Serilog.Sinks.MSSqlServer,它要么使用 System.Data.SqlClient ,要么使用舊版本的 Microsoft.Data.SqlClient,默認情況下不啟用加密。我在這里只提到這一點,因為可能有人會建議它——不要采用這種方法!
- 調整連接字串,使其忽略證書驗證錯誤。這也不是一個好主意!
- 調整連接字串以不使用加密 - 這不是一個好主意!
當您更新自己的代碼以使用 Microsoft.Data.SqlClient 而不是 System.Data.SqlClient 時,您可能會遇到同樣的問題。不妨現在咬緊牙關,使用您的機器信任的證書。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526341.html
