Система настроек (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.
Вы можете найти немного больше о системе конфигурацииздесь: