Fork me on GitHub

Prism6下的MEF:添加Logger

上篇已经简单的构建了一个Prism的程序,现在我们需要添加一个Logger,Prism本身自带一个功能简单的TextLogger,但是我们希望能用.Net常用的Log4net。所以我们需要重载掉Bootstrapper中的CreateLogger方法。

新建一个PrismSample.Infrastructure.Logger项目

从nuget中引用log4net的,添加配置文件logging.confing:




































































新建Logger类:

using log4net;
using log4net.Config;
using Prism.Logging;
using System;
using System.IO;

namespace PrismSample.Infrastructure.Logger
{
public class Logger : ILoggerFacade
{
private ILog _debugLogger;
private ILog _errorLogger;
private ILog _infoLogger;
private ILog _warnLogger;

public Logger()
{
var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "logging.config");
XmlConfigurator.ConfigureAndWatch(logCfg);

_debugLogger = LogManager.GetLogger("logdebug");
_errorLogger = LogManager.GetLogger("logerror");
_infoLogger = LogManager.GetLogger("loginfo");
_warnLogger = LogManager.GetLogger("logwarn");
}

public void Log(string message, Category category, Priority priority)
{
switch(category)
{
case Category.Debug:
_debugLogger.Debug(message ?? "");
break;
case Category.Exception:
_errorLogger.Error(message ?? "");
break;
case Category.Info:
_infoLogger.Info(message ?? "");
break;
case Category.Warn:
_warnLogger.Warn(message ?? "");
break;
}
}
}
}

PrismSample添加Logger项目的引用,并重载掉Bootstrapper中的CreateLogger方法:

protected override ILoggerFacade CreateLogger()
{
return new Logger();
}

Logger之所以不使用导入的方式是因为Logger的初始化在容器的初始化之前,我们预期Logger在程序已启动就配置完成,这样我们能记录容器初始化的过程。

测试Logger

修改ShellViewModel的构造函数如下:

[ImportingConstructor]
public ShellViewModel([Import("ShellView", typeof(IView))]IView view, [Import]ILoggerFacade logger)
{
this.View = view;
this._text = "Hello World";
this.View.DataContext = this;

logger.Log("ShellViewModel Created", Category.Info, Priority.None);
}

运行后打开Logger文件:
Image

现在整个项目的组织结构如下:
Image

小结

本文演示了log4net在Prism中的简单应用。
源码下载

参考信息

[Prism框架实用分享]如何在Prism应用程序中使用日志

posted @ 2016-07-15 08:10  tianjyan  阅读(1812)  评论(1)    收藏  举报