学习WCF\WPF\EF技术(四)--添加log4net功能能

来源:互联网 发布:淘宝的经营模式 编辑:程序博客网 时间:2024/04/30 05:35
   添加log4net功能
日志记录功能,是我们在调试和维护程序的好帮手.Log4net的优点(
log4Net使用指南):
   
几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。
   经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的
Bug;一旦在程序中加入了Log输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。
   
Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。

下面我要给当前项目(WCF+WPF+EF),分别添加单独的配置文件,并输出不同文件名的日志文件放在解决方案目录下的Log文件夹下.



1.下载log4net源代码并生成类库
首先你可以从
http://logging.apache.org/log4net/download_log4net.cgi下载log4net的源代码,(或者你可以在网上搜下编译好的log4net.dll文件),目前最新版本是log4net1.2.11.目前大多网上的参考资料都是稍旧些的版本,在调用时候API会不一样(如:在AssemblyInfo.cs文件中添加的API最新的为:log4net.Config.XmlConfiguration(),而不是稍早些的log4net.Config.DOMConfigurator()).


下载下来的源代码文件是个zip文件,我们解压它,进入src目录选择与我们使用的VS版本相对的解决方案.


上边那个"Test"项目可以不去管它,接下来我们只需在"log4net.vs2010"项目中右键生成项目,然后在"log4net-1.2.11\build\bin\net\2.0\debug"下复制保存log4net.dll文件.

2.为"WEB"\"WCF"添加引用"log4net.dll"和配置文件.(WEB为WCF提供托管,WCF是已类库形式引用在WEB项目中,所以不需要配置WCF中的App.config,只需要在WCF中修改Assembly.cs文件就可以了)


在"WCF"项目下,引用log4net.dll,"WEB"项目同样引用"log4net.dll"


在"Web"项目下,建立logWCF.config文件


修改web.config,在<configuration>的最顶部(一定要让<configSections>节点紧接着<configuration>)添加<configSections>节点,
内容为<section name="log4net"type="log4net.Config.Log4NetConfigurationsectionHandler"/>(这里有一点我没弄清楚,有知道的高人请指教区别:网上可以搜到大部分的实例有写type="
log4net.Config.Log4NetConfigurationsectionHandler,log4net"),2种写发我都测了,都可以实现本系列的需求.


logWCF.config文件内容,使用单独配置文件,可不写<configSection><section>标签
<root>为根日志,必写项,这里可以设置Appender对象作用在哪种级别(如果默认不声明,则为Debug级别),设置后在代码上反应为如:我设置了<levelvalue="INFO"/><appender-refref="myAppender"/>,调用时候则为log.Info("information").<appender>标签则是设置了自定义名称,使用的Appender类型(关于RollingFileAppender的内容可以参考
[C#]Log4net中的RollingFileAppender解析.)


修改"WCF"项目中的Assembly.cs,在最后添加[assembly:log4net.Config.XmlConfigurator(ConfigFile = "文件名"),Watch ="监视true/不监视false"],这个Watch是设置监视这个logWPF.config文件是否在程序运行的时候被修改\删除\重名等.(更详细的在Log4net使用指南中提到)


下面我们来测试下,在"Service"中是用log4net输出日志.


导入命名空间using log4net;
获得log对象:三种方式,
1.
ILog log =LogManager.GetLogger("SysAppender");//配置文件中Appender的名字

2.ILog log = LogManager.GetLogger(typeof(UserCMSWCFService));//类名

3.Ilog log =LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

//通过当前方法名获取当前类名




然后在想要输出日志的地方调用log.Info()\log.Error()方法.




输出结果.

    WPF"项目的配置方法与WCF配置的方法基本一致,引用log4net.dll,创建一个自定义的配置文件,添加上"log4net"的配置,修改AssemblyInfo.cs文件,不同的是要把自定义的配置文件放在自身所在的项目中,最重要的是要把自定义配置文件的属性之一"复制到输出目录"改为"始终复制"或者"如果较新则复制",我之前配置单独文件不成功,搜了很多文章都没有提到,最后感谢"以独立文件方式配置Log4net"一文的作者,分享经验解决此问题.







   



原创粉丝点击