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

时间:2016-02-27 17:21:57

标签: serilog

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

推荐的方法是:

Program.Main()或您应用的切入点位置设置Serilog是第一件事:

Log.Logger = new LoggerConfiguration()
  .WriteTo.Sink1()
  .WriteTo.Sink2()
  .CreateLogger();

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

Log.Information("This is a message");

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

XML / appSettings配置并未改变任何此类配置。它只是将一些细节移动到配置文件,因此将第一个代码块更改为:

Log.Logger = new LoggerConfiguration()
  .ReadFrom.AppSettings()
  .CreateLogger();

并补充说:

<add key="serilog:write-to:Sink1" />
<add key="serilog:write-to:Sink2" />

App.config会产生同样的效果。如果可以避免使用XML,那么代码中的配置通常不那么麻烦(移动部件更少)。

答案 1 :(得分:1)

这是我的多程序集日志解决方案:

我像往常一样在主程序集中使用配置设置了 Mainlogger,即负责创建和配置日志的程序集。在我的例子中,logging-master 是一个 GUI 应用程序,它与一个 dll 交互,它实际上完成了这项工作。

然后我在 slave-assembly 中安装了 Serilog 并像这样向 master 程序集暴露了一个订阅功能:

void SubscribeLogging(ILogger masterlogger)
{
    Log.Logger = new LoggerConfiguration()
          .MinimumLevel.Debug()
          .WriteTo.Logger(masterlogger)
          .CreateLogger();
}

如有必要,我会从主程序集调用

myDll.SubscribeLogging(Log.ForContext("SourceContext", "myDll"));

据我所知,可以在一定程度上操纵日志配置,但我没有尝试在从组件中使用完全不同的输出模板。