Nuget包

基础包

可选日志包

可以按实际需求进行选择,如NLog等,我们这里采用的是 Serilog 这个Nuget包Serilog Extensions Logging

根据日志输出的目标不同,可以选择不同的扩展方法包

目标 包名 说明
文件 Serilog.Sinks.File WiteTo可以使用File方法详细说明
命令行 Serilog.Sinks.Console
调试输出 Serilog.Sinks.Debug WiteTo可以使用Debug方法

其他扩展,请搜索 点击

日志容器注册

我们使用的是 DryIoc 进行注册,需要安装Nuget包 DryIoc.Microsoft.DependencyInjection 具体代码如下:

protected override IContainerExtension CreateContainerExtension()
{
    var serviceCollection = new ServiceCollection();
    serviceCollection.AddLogging(loggingBuilder =>
        loggingBuilder.AddSerilog(dispose: true));

    return new DryIocContainerExtension(new Container(CreateContainerRules())
        .WithDependencyInjectionAdapter(serviceCollection));
}

如果是Unity 则需要安装包 Unity.Microsoft.DependencyInjection 具体代码如下:

protected override IContainerExtension CreateContainerExtension()
{
    var serviceCollection = new ServiceCollection();
    serviceCollection.AddLogging(loggingBuilder =>
        loggingBuilder.AddSerilog(dispose: true));

    var container = new UnityContainer();
    container.BuildServiceProvider(serviceCollection);

    return new UnityContainerExtension(container);
}

我们对于不同的日志插件框架都是在 AddLogging这个地方进行添加的,需要注意的是我们不仅需要在ServiceCollection 中注册,还需要在容器对象中注册。注意区分 DryIoc中的WithDependencyInjectionAdapter Unity中的BuildServiceProvider使用差异。

日志配置

日志配置在Prism入口程序的CreateShell方法中

    protected override Window CreateShell()
    {
        Log.Logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .WriteTo.File("App.log")
        .CreateLogger();
        return Container.Resolve<MainWindow>();
    }

日志使用

注册ILogger接口使用日志

public class MyService : IMyService
{
    public MyService(ILogger<MyService> logger)
    {
        logger.LogInformation("Hello World from your logger!");
    }
}

参考连接