vs2010 中使用 log4net

时间:2022-11-03 18:57:09


*******************************************************************************
vs2010 中使用 log4net
环境:vs2010+framework4.0+log4net(1.2.10.0\framework 2.0)    

*******************************************************************************

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".log""/>
<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="​​>
<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了。
  这里只有将日志信息“写入文本文件”经过测试,其它的有待研究, 有更好的希望大家分享一下!