日志记录123

      之前用的是安装即用的Elmah作为本系统的日志记录与异常捕获框架,但是前段时间遇到了定制化问题,客户想看另一种表现形式的日志,且当插入到数据库中了之后,Elmah生成的记录特别大,所以无奈只好舍弃之,然后自行实现。

 

      其实日志这一块.Net用来用去也就那么几种选择。我选择了Common.Logging作为通用日志接口,后端使用了Common.Logging.NLog20与NLog作为日志实现。注意在配置时尽量使用异步日志,这样即能提高性能,也能增强用户体验。

      NLog文章系列——系列文章目录以及简要介绍

 

      在选择前者时要注意,在NuGet上还有一个名叫Common.Logging.NLog的框架,这是一个旧版本的框架,仅能配合NLog 1.0.505进行使用。如果使用最新的2.1,则会报错。

      Common Logging Could Not Load Type NLog.TargetWithLayout

 

      我们系统是一个B/S系统,所以在作日志记录时还需要记录访问者IP和当前登录用户名。在官网上我看到了${aspnet-request}这样子的Layout,但是在实际使用是却老是报配置错误,查了很久才发现,要想使用类似于${aspnet-*}之类的占位符,还需引用NLog.Extended,但官网上的文档却什么也没有说,真心坑爹啊!

      Problem with NLOG and ASP.NET

      NLog throws configuration exception on all aspnet layout renderers

 

      我最终是将日志记录到数据库中。很高兴NLog支持使用Oracle.Data.Access来访问Oracle。但是插入日期时,却报了“月份错误”这样奇怪的错。经过查询加上了格式化字符串后,又报“长度不够”这样的错,又查了半天,原来还需在Sql语句中再作一次转换。坑爹!

      NLog time formatting

      Logging to Oracle - are Version, Culture, and Public Key required?

 

      3.0之后的NHibernate也支持将日志插入log4net之外的日志框架,只需实现ILoggerFactory接口与IInternalLogger接口。需要注意的是,记录Sql语句的日志名称为nhibernate.sql。我这里是将NH接上Common.Logging,最终使用NLog进行日志记录。

      NHibernate中使用NLog

 

      系统出现异常时也需要记录日志。在Asp.Net里的标准做法是实现一个IHttpModule接口,在里面注册Application.Error事件捕获系统异常。Elmah也是这么做的。注意在记录日志时需try起来,失败了不作任何处理来屏蔽日志记录时可能产生的异常。

      asp.net捕获全局未处理异常的几种方法

posted @ 2014-03-20 20:45  永远的阿哲  阅读(362)  评论(0编辑  收藏  举报