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

前言

在Prism中有关日志的命名空间:

Microsoft.Practices.Prism.Logging

在Prism中,你可以使用Prism自带的Logger(比如TextLogger等),也可以使用自定义的Logger(比如Log4Net等),但所有的Logger都比须实现接口 ILoggerFacade 。下面就以Log4Net为例,实现一个自定义的Logger,并将它应用到Demo中。

有关Log4Net日志组件的使用方法这里就不介绍了,下面列出几篇介绍Log4Net的资料:

1. http://logging.apache.org/log4net/

2. http://blog.csdn.net/zhoufoxcn/article/details/2220533

3. http://blog.csdn.net/zhoufoxcn/article/details/6029021

Log4Net的配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net debug="true">
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="d:\log.txt"/>
      <param name="AppendToFile" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%l %d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="LogFileAppender"/>
    </root>
  </log4net>
</configuration>

以上是本例对Log4Net简单的配置

实现接口ILoggerFacade

新建一个类CustomLogger,并实现接口ILoggerFacade

    public class CustomLogger : ILoggerFacade
    {
        private readonly ILog s_ILogger = null;

        public CustomLogger()
        {
            if (s_ILogger == null)
            {
                s_ILogger = LogManager.GetLogger("Logger");
                log4net.Config.XmlConfigurator.Configure();
            }
        }

        #region ILoggerFacade 成员

        public void Log(string message, Category category, Priority priority)
        {
            if (string.IsNullOrEmpty(message))
                return;

            switch (category)
            {
                 case Category.Debug:
                    this.Debug(message);
                    break;
                case Category.Exception:
                    this.Error(message);
                    break;
                case Category.Info:
                    this.Info(message);
                    break;
                case Category.Warn:
                    this.Fatal(message);
                    break;
            }
        }

        #endregion


        void Debug(string message) { s_ILogger.Debug(message); }

        void Info(string message) { s_ILogger.Info(message); }

        void Error(string message) { s_ILogger.Error(message); }

        void Fatal(string message) { s_ILogger.Fatal(message); }
    }

简单的实现了ILoggerFacade接口,可参考Prism中TextLogger

将自定义Logger加载到主程序中

在Prism程序的启动器内Bootstrapper,重写CreateLogger()方法

        protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger()
        {
            return new CustomLogger();
        }

如何使用日志

在ViewModel或者其他逻辑类,服务类中,定义私有变量,并声明导入特性

        [Import]
        private ILoggerFacade _Logger;
        public void OnImportsSatisfied()
        {
            this._Logger.Log("Import Complete", Category.Info, Priority.None);

            if (PlugIns == null)
            ...
        }

 

posted @ 2014-03-03 11:57  @Sunth  阅读(3618)  评论(1编辑  收藏  举报