前言

在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)
...
}

[Prism框架实用分享]如何在Prism应用程序中使用日志的更多相关文章

  1. [Prism框架实用分享]如何在主程序中合理的弹出子窗体

    大家好 说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最 ...

  2. 转:如何在32位程序中突破地址空间4G的限制

    //如何在32位程序中突破地址空间4G的限制 //首先要获得内存中锁定页的权限 #define _WIN32_WINNT 0x0501 //xp系统 #include <windows.h> ...

  3. 如何在Android应用程序中使用传感器模拟器SensorSimulator

    原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...

  4. [zz]如何在C语言程序中处理汉字

    学习过C语言的人也许有时会遇到这样一个问题:如何用变量存储汉字以及对这些变量进行操作.目前许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,涉及到汉字的情况也大都是在print ...

  5. 如何在Qt 4程序中优化布局结构(表格讲解,很清楚)

    原文地址:http://blog.csdn.net/qter_wd007/archive/2010/03/13/5377882.aspx 在迄今为止讲到每一个例子中,我们只是简单的把窗口部件放置到某个 ...

  6. 如何在WPF应用程序中使用视频处理控件TVideoGrabber

    要在WPF 中使用 TVideoGrabber 组件,需要像下面的方法来使用 VS.NET(DLL) 版本的组件: ——复制TVideoGrabber_x.x.x.x_x86.dll到c:/windo ...

  7. 如何在Android应用程序中使用传感器(OpenIntents开源组织SensorSimulator项目)

    原文地址http://blog.sina.com.cn/s/blog_621c16b101013ygl.html OpenIntents项目和可用资源介绍 [1].    项目介绍:OpenInten ...

  8. 如何在Silverlight应用程序中获取ASP.NET页面参数

    asp.net Silverlight应用程序中获取载体aspx页面参数 有时候SL应用中需要使用由aspx页面中传递过来的参数值,此时通常有两种方法获取 1. 使用InitParameters属性, ...

  9. 示例 - 如何在Console应用程序中应用SpiderStudio生成的DLL?

    以前面生成的XML/JSON互转DLL为例, 我们写一个Console Appliction来做这件事情, 步骤如下: 1. 创建Console Project 2. 引入www.utilities_ ...

随机推荐

  1. Kb Article Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk.Que ...

  2. C++中的函数

    1.函数的定义和调用 函数的定义形式 返回类型 函数名(形式参数) { 语句序列: } 函数的调用 调用:声明函数原型,函数调用 声明函数原型:类型说明符 被调函数名(含类型说明的形参表) 函数调用: ...

  3. Java ThreadLocal 源代码分析

    Java ThreadLocal 之前在写SSM项目的时候使用过一个叫PageHelper的插件 可以自动完成分页而不用手动写SQL limit 用起来大概是这样的 最开始的时候觉得很困惑,因为直接使 ...

  4. IP组播 MulticastChannel接口 DatagramChannel实现

    监听者 import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; impo ...

  5. 最短寻道优先算法(SSTF)——磁盘调度管理

    原创 最近操作系统实习,敲了实现最短寻道优先(SSTF)——磁盘调度管理的代码. 题目阐述如下: 设计五:磁盘调度管理 设计目的: 加深对请求磁盘调度管理实现原理的理解,掌握磁盘调度算法. 设计内容: ...

  6. java入门---运算符&逻辑运算符&短路逻辑运算符&赋值运算符&条件运算符&instanceof 运算符

        这篇文章接着上次的来,主要看逻辑运算符&短路逻辑运算符&赋值运算符&条件运算符&instanceof 运算符这五种运算符.     首先来看逻辑运算符.下表列出 ...

  7. 选择区域缩放Flex Chart

    http://www.riafan.com/zoom-chart/ 演示地址: http://www.riafan.com/flash/zoomchart/ 下载地址: http://www.riaf ...

  8. 20155317 《Java程序设计》0510上课考试博客

    20155317 <Java程序设计>0510上课考试博客 二.Arrays和String单元测试 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常, ...

  9. 2016-2017-2 20155331 实验二《Java面向对象程序设计》实验报告

    2016-2017-2 20155331 实验二<Java面向对象程序设计>实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握U ...

  10. odoo学习之:【转】控制menuitem的显示权限

    作者原文:https://blog.csdn.net/wangnan537/article/details/43992771 在实际应用Odoo(OpenERP)的过程中, 会有对某用户组隐藏菜单的需 ...