勉強から Serilog.Sinks.AzureTableStorage 私は以下を持っています
メインで
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration) // the error happens here
.CreateLogger();
logger.Information("Hello, world!");
Appsetttings.json(接続文字列が異なる)
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.AzureTableStorage" ],
"MinimumLevel": "Debug",
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" }
},
{
"Name": "AzureTableStorage",
"Args": {
"storageTableName": "mystoragetable",
"connectionString": "myconnectionstring"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Destructure": [
{
"Name": "With",
"Args": { "policy": "Sample.CustomPolicy, Sample" }
},
{
"Name": "ToMaximumDepth",
"Args": { "maximumDestructuringDepth": 4 }
},
{
"Name": "ToMaximumStringLength",
"Args": { "maximumStringLength": 100 }
},
{
"Name": "ToMaximumCollectionCount",
"Args": { "maximumCollectionCount": 10 }
}
],
"Properties": {
"Application": "Sample"
}
}
デバッグ出力で、ストレージテーブルにデータが記録されていません。
スローされた例外:System.Private.CoreLib.dllの「System.InvalidCastException」
タイプSystem.InvalidCastExceptionの未処理の例外がSystem.Private.CoreLib.dllで発生しました
「System.String」から「Serilog.Core.IDestructuringPolicy」への無効なキャスト。
[更新]
GitHubのReadMe.Mdのように非常に単純な構成を使用すると、同じエラーが発生します。
[更新]
Kennyzxリンクからコードをコピーしました。エラーはに変わりました
System.InvalidCastException
HResult=0x80004002
Message=Invalid cast from 'System.String' to 'Serilog.Core.ILogEventFilter'.
Source=System.Private.CoreLib
Serilog-settings-configurationサンプルプロジェクトを.netcore2.1にアップグレードしてみることにしました この質問
数時間後、serilog-settings-configurationはdotnetcore 2.1と互換性がないという結論に達しました
seSerilog と呼ばれる新しい.NET Core 2.1コンソールプロジェクトをセットアップしようとすると、問題を再現できます。
Destructure
セクションとFilter
セクションを構成から削除すると、アプリが機能し始めます。
次に、Serilog.Settings.Configuration
パッケージのソースコードを確認します this commit を見つけ、このように機能させるにはコードを記述する必要があるという結論に達しました。
以下の構成では、CustomPolicy
を実装する "Sample"ネームスペースにIDestructuringPolicy
クラスを記述することが期待されています。
{
"Name": "With",
"Args": { "policy": "Sample.CustomPolicy, Sample" }
}
これを削除し、Destructure
を次のように残すと、機能します。
"Destructure": [
{
"Name": "ToMaximumDepth",
"Args": { "maximumDestructuringDepth": 3 }
},
{
"Name": "ToMaximumStringLength",
"Args": { "maximumStringLength": 10 }
},
{
"Name": "ToMaximumCollectionCount",
"Args": { "maximumCollectionCount": 5 }
}
]
この調査結果がお役に立てば幸いです。