Как войти в 2 экземпляра одного и того же типа приемника (Seq)?
Возможный? Не удается найти "экспедитора приемников", где один приемник может пересылать нескольким другим приемникам, возможно, того же типа.
В документации Serilogs ( https://github.com/serilog/serilog/wiki/AppSettings) четко указано, что
ПРИМЕЧАНИЕ. При использовании serilog: ключи должны быть уникальными. *
поэтому добавление одного и того же приемника Seq несколько раз не кажется хорошей идеей.
Я ищу ту же концепцию, что и в log4net, где один регистратор может содержать несколько приложений.
1 ответ
К сожалению <appSettings>
провайдер конфигурации для Serilog не поддерживает этот случай; appSettings.json
один делает, если вы можете использовать его, в противном случае настройка приемников в коде WriteTo.Seq(...).WriteTo.Seq(...)
это путь
Полу-обходной стиль решения:
- Ставим в appsettigs "читать эти ключи"
Пример 1: прочитать один ключ
<add key="SerilogToHttpKeys" value="MyMachineA" />
Пример 2 (который решает проблему): прочитать много ключей
<add key="SerilogToHttpKeys" value="MyMachineA, MyLocalMachine, MachineOnTheMoon" />
Оба случая "указывают" на неограниченное количество ключей, которые затем считываются с помощью кода (см. 2) и, следовательно, могут быть изменены без перекомпиляции.
<add key="MyLocalMachine" value="http://localhost:5341/;juzOPqqqqqqqq" />
<add key="MyMachineA" value="http://10.107.14.57:5341/;m8QVnDaqqqqqqqqqqqqq" />
<add key="MachineOnTheMoon" value="http://10.107.14.62:5341/;Ah0tSzqqqqqqqqqqqq"
Зациклите ключи в коде - каждый ключ указывает на http-адрес с ключом API, который используется для входа в Seq, но измените структуру каждой записи, и вы можете войти в файл и т. Д.
foreach (var aKey in System.Configuration.ConfigurationManager.AppSettings.Get("SerilogToHttpKeys") .Split(',')//Use , as separator .Select(s => s.Trim())) { var fields = System.Configuration.ConfigurationManager.AppSettings.Get(aKey); var separator = ';'; string serverUrl = fields.Split(separator)[0]; string apiKey = fields.Split(separator)[1]; loggerConfiguration = loggerConfiguration.WriteTo.Seq(serverUrl: serverUrl, apiKey: apiKey); }
Я использую это для одновременного ведения журнала как на моем сервере, так и на моей машине разработчика - проще держать localhost Seq открытым при возникновении ошибок и посмотреть, смогу ли я найти их там, вместо входа на сервер. Однако, если мой devmachine не в сети, у меня также есть журналы на сервере. Конечно, если более одного человека обращаются к серверу, необходимы лицензии для Seq, но в простом случае "один разработчик, одна машина разработчика, один сервер" это работает.