一个用于多项目解决方案的记录器

The*_*l26 10 serilog

我正在将Serilog集成到我创建的现有多级层和多装配解决方案中.我之前使用的日志记录技术只是通过事件向字符串传递字符串.我想摆脱这个.

我已经读过,我可以使用app.config文件将记录器配置加载到我的库中的每个类中,但是如何在多组件项目中执行此操作.

我有一个顶级/启动项目和两个类库项目.我想在整个程序中使用带有两个接收器的相同记录器.

这些是我到目前为止发现的文章

https://github.com/serilog/serilog/wiki/AppSettings

http://nblumhardt.com/2014/04/xml-configuration-for-serilog/

有人可以解释如何实现这一目标吗?

Nic*_*rdt 7

Serilog允许您按程序使用记录器配置; 虽然可以逐类调整日志记录,但这通常是在事后进行过滤等等.

建议的方法是:

将Serilog设置为Program.Main()应用入口点的首要位置:

Log.Logger = new LoggerConfiguration()
  .WriteTo.Sink1()
  .WriteTo.Sink2()
  .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

请注意,这会设置静态Log类.在你的应用程序的其他地方你现在可以写:

Log.Information("This is a message");
Run Code Online (Sandbox Code Playgroud)

并将消息传递给两个接收器.你可以避免使用静态Log而不是传递ILogger,但除非你在这里有强烈的偏好,否则静态选项不那么麻烦.

XML/appSettings配置不会改变任何这一点.它只是将一些细节移动到配置文件,因此将第一个代码块更改为:

Log.Logger = new LoggerConfiguration()
  .ReadFrom.AppSettings()
  .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

并添加:

<add key="serilog:write-to:Sink1" />
<add key="serilog:write-to:Sink2" />
Run Code Online (Sandbox Code Playgroud)

App.config将具有相同的效果.如果可以避免使用XML,则代码中的配置通常不那么麻烦(移动部件更少).