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!");
}
}