1

可能的?找不到“接收器转发器”,其中一个接收器可以转发到其他几个可能相同类型的接收器。

Serilogs 文档 ( https://github.com/serilog/serilog/wiki/AppSettings ) 明确指出

注意:使用 serilog 时:键必须是唯一的。*

所以多次添加相同的 Seq sink 似乎不是一个好主意。

我正在寻找与 log4net 中相同的概念,其中一个记录器可以容纳多个附加程序。

4

2 回答 2

1

不幸的是<appSettings>,Serilog 的配置提供程序不支持这种情况;appSettings.json如果您能够使用它,则可以使用它,否则在代码中配置接收器是可行的WriteTo.Seq(...).WriteTo.Seq(...)方法。

于 2018-11-15T23:59:14.537 回答
0

解决方案的半解决方法:

  1. 在 appettigs 中添加“阅读这些密钥”

示例 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" 
  1. 循环代码中的键 - 每个键都指向一个带有 API 键的 http 地址,用于记录到 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 需要服务器许可证,但在一个简单的“一个开发人员,一个开发机器,一个服务器”中它可以工作。

于 2020-08-11T08:09:49.570 回答