Допустим, у меня есть следующая конфигурация Serilog в YAML:
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.ApplicationInsights",
"Serilog.Sinks.Seq", "Serilog.Sinks.RollingFile", "Serilog.Sinks.Syslog"
],
"MinimumLevel": {
"Default": "Warning",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Microsoft.AspNetCore.Authentication": "Warning"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}
{NewLine}Request ID: {RequestId}{NewLine}{Message:lj}{NewLine}
{Exception}"
}
}
,{
"Name": "Syslog",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}
{NewLine}Request ID: {RequestId}{NewLine}{Message:lj}{NewLine}
{Exception}",
"server": "logsN.papertrailapp.com",
"port": "XXXXX",
"application": "My Application",
"facility": "Local6"
}
}
,{
"Name": "RollingFile",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}
{NewLine}Request ID: {RequestId}{NewLine}{Message:lj}
{NewLine}{Exception}",
"pathFormat": "Logs\\log-{Date}.txt"
}
}
,{
"Name": "ApplicationInsights"
}
{
"Name": "Seq",
"Args": {
"serverUrl": ""
}
}
],
"Enrich": [ "FromLogContext" ],
"Properties": {
"Application": "My Application"
}
}
, которая является рабочей конфигурацией и работает при запуске в консоли и в докере.
Но я хочу иметь возможность переопределить некоторые значения, в основном, каталог.(pathFormat) для скользящего файла и сервера Serilog и порта (для papertrail) из файла yaml докера.Сейчас я делаю это как добавление переменных окружения, и после того, как я вызываю
var loggerConfiguration = new LoggerConfiguration() .ReadFrom.Configuration(Configuration);
, я вызываю следующую вещь:
var appInsightsInstrumentationKey = Configuration.GetValue<string>("AppInsights_InstrumentationKey");
if (!string.IsNullOrEmpty(appInsightsInstrumentationKey))
{
loggerConfiguration.WriteTo
.ApplicationInsightsEvents(appInsightsInstrumentationKey);
}
И, наконец, внутри docker.yaml (короткая версия, не все значения включены):
services:
myapplication:
environment:
APPINSIGHTS_INSTRUMENTATIONKEY: "xxxxxx-xxxxxx-xxxxxx-xxxxxx"
Я пытался получить доступ к настройкам Serilog со следующей конфигурацией YAML:
services:
myapplication:
environment:
Serilog:
WriteTo:
-Name: "Syslog"
Args:
port:"xxxxx"
Однако я получаю ошибку: expected <block end> but found <block mapping start>
(которая указывает на "-Name:" Syslog"" строка).
Как правильно сопоставить массив внутри YAML.