NHibernate中使用NLog

话说以前的NHibernate版本与Log4Net紧密集成,在群众们千乎万唤之下终于将Log4Net下分离了出来,在NH3本中引入了ILoggerFactory接口,现在我们可以使用其它的Log框架作为NH3的日志记录工具。现在我打算将NLog作为NHibernate的日志工具。 这里提供本文章的代码:代码下载
废话少说,直奔主题,通过以下三步就可以让NHibernate 3使用NLog:
1.提供一个自定义的继承自ILoggerFactory的类。
2.在App.config或Web.config中使用自定义的ILoggerFactory。
3.配置NLog。
先看一下ILoggerFactory接口,该接口返回IInternalLogger类:
image
创建一个名为NHibernate.Logging的工程

添加NHibernate和NLog的引用:
添加两个类:NLogFactory和NLogLogger。这两个类分别实现ILoggerFactory和IInternalLogger接口。代码如下:
NLogFactory.cs  
1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using NLog; 5 6 namespace NHibernate.Logging 7 { 8 public class NLogFactory : ILoggerFactory 9 { 10 public IInternalLogger LoggerFor(System.Type type) 11 { 12 return new NLogLogger(); 13 } 14 15 public IInternalLogger LoggerFor( string keyName) 16 { 17 return new NLogLogger(); 18 } 19 } 20 }
  
NLogLogger.cs
1 using System; 2 using System.Collections.Specialized; 3 using System.Configuration; 4 using NLog; 5 6 namespace NHibernate.Logging 7 { 8 public class NLogLogger : IInternalLogger 9 { 10 private static readonly Logger log = LogManager.GetCurrentClassLogger(); 11 12 public bool IsDebugEnabled { get ; private set ; } 13 public bool IsErrorEnabled { get ; private set ; } 14 public bool IsFatalEnabled { get ; private set ; } 15 public bool IsInfoEnabled { get ; private set ; } 16 public bool IsWarnEnabled { get ; private set ; } 17 18 public NLogLogger() 19 { 20 IsErrorEnabled = true ; 21 IsFatalEnabled = true ; 22 IsWarnEnabled = true ; 23 IsDebugEnabled = true ; 24 IsInfoEnabled = true ; 25 } 26 27 public void Debug( object message, Exception exception) 28 { 29 if (IsDebugEnabled) 30 log.DebugException(message.ToString(), exception); 31 } 32 33 public void Debug( object message) 34 { 35 if (IsDebugEnabled) 36 log.Debug(message.ToString()); 37 } 38 39 public void DebugFormat( string format, params object [] args) 40 { 41 if (IsDebugEnabled) 42 log.Debug( string .Format(format, args)); 43 } 44 45 public void Error( object message, Exception exception) 46 { 47 if (IsErrorEnabled) 48 log.ErrorException(message.ToString(), exception); 49 } 50 51 public void Error( object message) 52 { 53 if (IsErrorEnabled) 54 log.Error(message.ToString()); 55 } 56 57 public void ErrorFormat( string format, params object [] args) 58 { 59 if (IsErrorEnabled) 60 log.Error( string .Format(format, args)); 61 } 62 63 public void Fatal( object message, Exception exception) 64 { 65 if (IsFatalEnabled) 66 log.Fatal(message.ToString(), exception); 67 } 68 69 public void Fatal( object message) 70 { 71 if (IsFatalEnabled) 72 log.Fatal(message.ToString()); 73 } 74 75 public void Info( object message, Exception exception) 76 { 77 if (IsInfoEnabled) 78 log.Info(message.ToString(), exception); 79 } 80 81 public void Info( object message) 82 { 83 if (IsInfoEnabled) 84 log.Info(message.ToString()); 85 } 86 87 public void InfoFormat( string format, params object [] args) 88 { 89 if (IsInfoEnabled) 90 log.Info( string .Format(format, args)); 91 } 92 93 public void Warn( object message, Exception exception) 94 { 95 if (IsWarnEnabled) 96 log.WarnException(message.ToString(), exception); 97 } 98 99 public void Warn( object message) 100 { 101 if (IsWarnEnabled) 102 log.Warn(message.ToString()); 103 } 104 105 public void WarnFormat( string format, params object [] args) 106 { 107 if (IsWarnEnabled) 108 log.Warn( string .Format(format, args)); 109 } 110 } 111 }
 
在主程序中引用该程序集和NHibernate与NLog程序集
image

好,现在我们已经完成了基本的工作,接下来只需要象平时一样增加NHibernate的配置文件和NLog的配置文件既可。
image
image

不要忘记将这两个配置文件的属性都设置成始终复制:
image
一切准备就绪,最后在App.config(ASP.NET 中是web.config)中加入如下代码就可以工作了:
关于为什么要加入nhibernate-logger配置节,请参见我另一篇文章《 关于《NHibernate中使用NLog》中在App.config(web.config)中增加nhibernate-logger节点的疑惑
image

运行后就可以看到Console有相应的日志输出,同时在bin中也有nlog.log和nhibernate.log两个日志文件输出。现在这两位同志终于可以并肩做战了,哈哈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值