.net Core и приемник электронной почты Serilog - конфигурация json - PullRequest
0 голосов

Я использую .net Core 2.0 и Serilog Email.У меня проблема с настройкой приемника электронной почты с appsettings.json.Та же конфигурация из program.cs работает, а из appsetting.json - нет.

Here is code from appsettings.json

Here is code from program.cs

1 Ответ

0 голосов
/ 29 мая 2018

Система настроек (ReadFrom.Configuration()) действительно только пытается вызвать методы и методы расширения , которые она может обнаружить, и передать аргументы, предоставленные из файла конфигурации .

К сожалению, на данный момент поддерживаются только базовые типы (конвертируемые в / из string и несколько более конкретных случаев), и поэтому параметры типа EmailConnectionInfo не могут быть предоставлены,

В качестве обходного пути, однако, если вам нужно передать только несколько параметров, вы можете создать свой собственный метод расширения, который принимает необходимые параметры, и вызывать его из системы конфигурации.

В вашем случае вам нужно будет сделать следующее:

Сначала определите метод расширения EmailCustom(...), который можно подключить к WriteTo (тип Serilog.Configuration.LoggerSinkConfiguration) и возвращает LoggerConfiguration.

Это будет выглядеть примерно так (не проверено, без использования и т. д .: P):

namespace Serilog{
    public static class MyCustomExtensions
    {
        public static LoggerConfiguration EmailCustom(this LoggerSinkConfiguration sinkConfiguration, string param1, int param2, LogEventLevel restrictedToMinimumLevel){
            // the actual call to configure the Email sink, passing in complex parameters
            return sinkConfiguration.Email(... ... , restrictedToMinimumLevel , EmailConnectionInfo(){
            Foo = "bar",
            Baz = param1,
            Qux = param2,
            }
            );
        }
    }
}

С этого момента вы сможете писатьКод C #, например:

new LoggerConfiguration()
    .WriteTo.EmailCustom(param1: "my param1", param2: 42)
   // ...
    .CreateLogger();

После того, как у вас все получится, вы можете фактически определить вызов этого метода в json , в этом случае благодаря Serilog.Settings.Configuration , это выглядело бы как

{
"Serilog": {
    "Using" : ["TheNameOfTheAssemblyThatContainsEmailCustom"],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "EmailCustom",
        "Args": {
          "param1": "my param1",
          "param2": 42,
          "restrictedToMinimumLevel": "Verbose"
        }
      }]
    }
}

Эта стратегия может быть применена и для других приемников и других конфигурационных частей Serilog.


Вы можете найти немного больше о системе конфигурацииздесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...