Неверное приведение из 'System.String' к 'Serilog.Core.IDestructuringPolicy' - PullRequest
0 голосов
/ 02 ноября 2018

Из учебы 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.InvalidCastException в System.Private.CoreLib.dll

Произошло необработанное исключение типа «System.InvalidCastException» в System.Private.CoreLib.dll

Неверное приведение из «System.String» к «Serilog.Core.IDestructuringPolicy».

[Обновление] * * тысяча двадцать один

Если я использую очень простую конфигурацию в соответствии с ReadMe.Md в GitHub, я получаю ту же ошибку.

[Update]

Я скопировал код из ссылки 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 s не совместим с dotnetcore 2.1

1 Ответ

0 голосов
/ 03 ноября 2018

Я пытаюсь настроить новый консольный проект .NET Core 2.1 под названием UseSerilog , и я могу воспроизвести проблему.

После удаления разделов Destructure и Filter из конфигурации приложение начинает работать.

Затем я проверяю исходный код пакета Serilog.Settings.Configuration, нахожу этот коммит , и я прихожу к выводу, что вам нужно написать некоторый код, чтобы он работал таким образом.

Для приведенной ниже конфигурации вы должны написать класс 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 }
  }
]

Надеюсь, этот вывод вам поможет.

...