前言
在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.****.net/zhoufoxcn/article/details/2220533
3. http://blog.****.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)
...
}