vs2010 中使用 log4net

来源:互联网 发布:淘宝申请换货步骤 编辑:程序博客网 时间:2024/03/29 07:56
 

*******************************************************************************
vs2010 中使用 log4net
环境:vs2010+framework4.0+log4net(1.2.10.0\framework 2.0)
参考:http://www.cnblogs.com/llhhll/archive/2011/03/01/1967741.html
      http://blog.csdn.net/lyjcn/article/details/4432833
      http://blog.csdn.net/maths_bai/article/details/6074125
      http://hi.baidu.com/zonecens/blog/item/506d805184b0fc878d54306a.html
*******************************************************************************

1.在项目中加入对 log4net 的引用

2.编译项目,如果已经加入了log4net 的引用
  但是编译时还出请添加对“log4net 的引用”的提示,
  这时你需要修改当前项目的“目标框架”版本,先将
  目标框架版本选择成“.NET Framework 2.0” ,然后
  再编译,等编译成功了,你再将“目标框架”版本修改
  为 4.0 就好了。(原因吗,我也不知道为什么!哈哈)

3.添加 log4net 以指定配置文件初始化实例
  [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
  你可以在两个地方写这行代码(我测试用的是 winform 程序)
  3.1 应用程序入口点,也就是 Main 函数所在的类(Program.cs),在那个类的命名空间上一行添加
  3.2 在 Properties/AssemblyInfo.cs 最后一行添加

4.修改应用程序配置文件 app.config 或者 web.config
  在 <configuration> 标签的下一行添加以下的标签及内容
  <configSections>
 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-2.10"/>
  </configSections>

5.添加配置文件,看看第三步骤我们写的那行代码了吧
  5.1 其中的 ConfigFile = "log4net.config"
      其实就是自定义了一个配置文件,如果不写的话你要将 log4net 的那些配置写在 app.config 中,
      这样我觉得比较乱。
  5.2 其中的 Watch = true
      就是让 log4net 自动的去监视 log4net.config 文件的改动,如果内容有改动你也不用重新启动
      应用程序 log4net 就会自动按照新配置去执行了。
  5.3 添加 log4net 配置文件
      右键项目/添加/添加新项,选择 “应用程序配置文件”,将其命名为 log4net.config,点击【添加】
  注意:右键新建的 log4net.config 文件点击【属性】,在属性窗口中将‘复制到输出目录’改为‘如果较新则复制’
        或者你可以手动将 log4net.config 文件复制到你应用程序输出目录。如果不这样做 log4net 组件是找不到
        配置文件的,但是它本身不会报错就是不会出现日志信息(够你郁闷一会儿的了)。

一下是 log4net 的配置,可以直接使用

----------------------------------------log4net.config 内容开始---------------------------------------------------

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
 
 <root>
  <level value="ALL"/>
  <appender-ref ref="RollingLogFileAppender"/>
 </root>
 
 <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <!-- 将日志生成在应用程序根目录的 ExceptionLogFiles 文件夹中,文件以当前日志命名 -->
  <param name="File" value="ExceptionLogFiles/"/>
  <param name="Encoding" value="GB2312" />
  <param name="AppendToFile" value="true"/>
  <param name="RollingStyle" value="Date" />
  <param name="DatePattern" value="yyyyMMdd" />
  <param name="MaximumFileSize" value="2KB"/>
  <param name="MaxSizeRollBackups" value="10"/>
  <param name="StaticLogFileName" value="false"/>
  <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
  <param name="RollingStyle" value="Composite"/>
  
  <layout type="log4net.Layout.PatternLayout">
   <param name="ConversionPattern" value="异常时间:%date{yy-MM-dd HH:mm:ss,fff} %n线程编号:%t %n异常信息:%exception所在文件:%F%n所在行号:%L%n其它信息:%m%n********************************************%n"/>
  </layout>
  
  <filter type="log4net.Filter.LevelRangeFilter">
  </filter>
  
 </appender>

 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
   <param name="ConversionPattern" value="异常时间:%date{yy-MM-dd HH:mm:ss,fff} %n线程编号:%t %n异常信息:%exception所在文件:%F%n所在行号:%L%n其它信息:%m%n********************************************%n"/>
  </layout>
 </appender>
 
 <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="dongxiaoning@tiantian.com"></to>
  <from value="dongxiaoning@tiantian.com"/>
  <subject value="Test Log Message"/>
  <smtpHost value="email.tiantian.com"/>
  <username value="dongxiaoning"/>
  <password value="123456"/>
  <bufferSize value="2048"/>
  <!--超长部分是否丢弃-->
  <lossy value="false"/>
  <!--输出级别在WARN和OFF之间的日志-->
  <filter type="log4net.Filter.LevelRangeFilter">
   <param name="LevelMin" value="WARN"/>
   <param name="LevelMax" value="OFF"/>
  </filter>

  <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="异常时间:%date{yy-MM-dd HH:mm:ss,fff} %n线程编号:%t %n异常信息:%exception所在文件:%F%n所在行号:%L%n其它信息:%m%n********************************************%n"/>
  </layout>
 </appender>

 <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
  <!--<bufferSize value="10" />-->
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <connectionString value="Server=localhost;UID=sa;PWD=123456;DataBase=log;Max Pool Size=1000"/>
  <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/>
  <parameter>
   <parameterName value="@log_date"/>
   <dbType value="DateTime"/>
   <!--
        <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
    </layout>
    -->
   <layout type="log4net.Layout.RawTimeStampLayout"/>
  </parameter>
  <parameter>
   <parameterName value="@thread"/>
   <dbType value="String"/>
   <size value="255"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%t"/>
   </layout>
  </parameter>
  <parameter>
   <parameterName value="@log_level"/>
   <dbType value="String"/>
   <size value="50"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%p"/>
   </layout>
  </parameter>
  <parameter>
   <parameterName value="@logger"/>
   <dbType value="String"/>
   <size value="255"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%c"/>
   </layout>
  </parameter>
  <parameter>
   <parameterName value="@message"/>
   <dbType value="String"/>
   <size value="4000"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%m"/>
   </layout>
  </parameter>
 </appender>

</log4net>

----------------------------------------log4net.config 内容结束---------------------------------------------------

6.代码中的写法
  log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  log.Fatal("log.Fatal", new Exception("log.Fatal"));
  log.Error("log.Error", new Exception("log.Error"));
  log.Warn("log.Warn", new Exception("log.Warn"));
  log.Info("log.Info", new Exception("log.Info"));
  log.Debug("log.Debug", new Exception("log.Debug"));

7.生成的日志效果如下

********************************************
异常时间:11-08-28 18:34:13,203
线程编号:4412
异常信息:System.Exception: 测试异常
所在文件:D:\WorkTemp\TestSpace\Log4net\TestApp\Log4NetTest\Log4NetTest\Form1.cs
所在行号:38
其它信息:第一个参数
********************************************

8.总结
  这里也就不说那些乱七八糟的配置节都是什么意思了,我的目的只有一个“让log4net 能再在vs2010环境中正常使用”
  能用了之后你再去深究那些配置,配出你所需要的效果就OK了。
  这里只有将日志信息“写入文本文件”经过测试,其它的有待研究, 有更好的希望大家分享一下!
 

原创粉丝点击