Dav*_*man 10 log4net prism prism-4
我正在从Prism 2.1转换为Prism 4,我需要为Log4Net编写一个ILoggerFacade类.我从Prism 2.1获取的旧代码不再有效.有没有人有他们愿意分享的ILoggerFacade类的示例代码?谢谢你的帮助.
Dav*_*man 24
我想到了.与Prism 2非常相似.首先,创建一个实现ILoggerFacade的自定义记录器类.这是我的班级:
using log4net;
using Microsoft.Practices.Prism.Logging;
namespace FsNoteMaster3
{
class Log4NetLogger : ILoggerFacade
{
#region Fields
// Member variables
private readonly ILog m_Logger = LogManager.GetLogger(typeof(Log4NetLogger));
#endregion
#region ILoggerFacade Members
/// <summary>
/// Writes a log message.
/// </summary>
/// <param name="message">The message to write.</param>
/// <param name="category">The message category.</param>
/// <param name="priority">Not used by Log4Net; pass Priority.None.</param>
public void Log(string message, Category category, Priority priority)
{
switch (category)
{
case Category.Debug:
m_Logger.Debug(message);
break;
case Category.Warn:
m_Logger.Warn(message);
break;
case Category.Exception:
m_Logger.Error(message);
break;
case Category.Info:
m_Logger.Info(message);
break;
}
}
#endregion
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在Prism 4 Bootstrapper类中,向CreateLogger()返回自定义记录器类的新实例的方法添加覆盖:
protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger()
{
return new Log4NetLogger();
}
Run Code Online (Sandbox Code Playgroud)
请注意,在自定义记录器类中,ILog是Log4Net接口,并且LogManager是Log4Net对象.
从您自己的代码写入自定义记录器(Prism负责自己的日志条目)与Prism 2.1略有不同.您可以直接从IoC容器解析记录器,也可以使用ServiceLocator.将ServiceLocator有被容器无关,这意味着潜在的容器不真正重要的优势.以下是使用ServiceLocator解析记录器的示例:
var logger = (Log4NetLogger)ServiceLocator.Current.GetInstance(typeof(ILoggerFacade));
logger.Log("App.OnStartup() completed", Category.Info ,Priority.None);
Run Code Online (Sandbox Code Playgroud)
该ServiceLocator要求主机项目必须Microsoft.Practices.ServiceLocation.dll参考和匹配using声明.
| 归档时间: |
|
| 查看次数: |
9730 次 |
| 最近记录: |