log4net.config 将日记同时写入到数据库和文件当中

1》在项目中新建新建一个log4net.config的配置文件。

2》从log4net官网下面log4net的文件包,然后在包的bin文件夹下的net文件夹中的4.0文件夹中找到log4net.dll文件,然后将它引入到我们的项目中来

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <configuration>  
  3.   
  4.   <configSections>  
  5.     <!--配置一个结点 名称为log4net-->  
  6.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />  
  7.   </configSections>  
  8.   
  9.   <log4net>  
  10.     <!--写入到文件-->  
  11.     <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">  
  12.         
  13.       <!--文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,其他则这里要有文件名。已经扩展支持虚拟目录-->    
  14.       <param name="File" value="Log\\LogInfo\\" /><!--将日记写入到跟目录下面的Log文件夹下面的LogInfo文件夹下面的yyyy-MM-dd.TXT文件中-->       
  15.   
  16.       <param name="AppendToFile" value="true" />  
  17.   
  18.       <param name="MaxSizeRollBackups" value="100" />  
  19.   
  20.       <param name="MaximumFileSize" value="10240KB" />  
  21.   
  22.       <param name="StaticLogFileName" value="false" />  
  23.   
  24.       <param name="RollingStyle" value="Date" />  
  25.            
  26.       <param name="DatePattern" value="yyyy-MM-dd.TXT" /> <!--TXT后缀必须是大写的,否则有问题-->  
  27.         
  28.       <param name="CountDirection" value="-1" />  
  29.         
  30.   
  31.       <!--log4net记录错误的格式(即:用什么样的格式(布局)来记录错误)-->  
  32.   
  33.       <layout type="log4net.Layout.PatternLayout">  
  34.         <param name="ConversionPattern" value=" 【时间】:%d%n 【级别】:%p%n 【类名】:%c%n 【线程ID】: %thread %n 【文件地址】:%F 第%L行%n 【日志内容】:%m%n 【日记详细】:%exception %n---------------------------------------------------------------------------------------------------------------%n" />  
  35.       </layout>  
  36.     </appender>  
  37.   
  38.     <!--将日记写入数据库-->  
  39.       
  40.     <appender name="ADONetAppender_SqlServer" type="log4net.Appender.ADONetAppender">  
  41.       <bufferSize value="0" />  
  42.       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  43.       <!--<connectionString value="SERVER=FB-VAIO;DATABASE=sales;UID=sa;PWD=123456;Connect Timeout=15;" />-->  
  44.       <connectionString value="Data Source=FB-VAIO;Initial Catalog=sales;Integrated Security=SSPI;Connect Timeout=15;" />  
  45.       <commandText value="INSERT INTO xlog ([Date],[Thread],[Level],[logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  46.   
  47.       <parameter>  
  48.         <parameterName value="@log_date"/>  
  49.         <dbType value="DateTime"/>  
  50.         <layout type="log4net.Layout.RawTimeStampLayout"/>         
  51.       </parameter>  
  52.   
  53.       <parameter>  
  54.         <parameterName value="@thread"/>  
  55.         <dbType value="String"/>  
  56.         <size value="255"/>  
  57.         <layout type="log4net.Layout.PatternLayout">  
  58.           <conversionPattern value="%t"/>  
  59.         </layout>  
  60.       </parameter>  
  61.   
  62.       <parameter>  
  63.         <parameterName value="@log_level"/>  
  64.         <dbType value="String"/>  
  65.         <size value="50"/>  
  66.         <layout type="log4net.Layout.PatternLayout">  
  67.           <conversionPattern value="%p"/>  
  68.         </layout>  
  69.       </parameter>  
  70.   
  71.       <parameter>  
  72.         <parameterName value="@logger"/>  
  73.         <dbType value="String"/>  
  74.         <size value="50"/>  
  75.         <layout type="log4net.Layout.PatternLayout">  
  76.           <conversionPattern value="%logger"/>  
  77.         </layout>  
  78.       </parameter>  
  79.   
  80.       <parameter>  
  81.         <parameterName value="@message"/>  
  82.         <dbType value="String"/>  
  83.         <size value="4000"/>  
  84.         <layout type="log4net.Layout.PatternLayout">  
  85.           <conversionPattern value="%m"/>  
  86.         </layout>  
  87.       </parameter>  
  88.   
  89.       <parameter>  
  90.         <parameterName value="@exception"/>  
  91.         <dbType value="String"/>  
  92.         <size value="2000"/>  
  93.         <layout type="log4net.Layout.ExceptionLayout">  
  94.           <conversionPattern value="%exception"/>  
  95.         </layout>  
  96.       </parameter>  
  97.     </appender>  
  98.   
  99.     <!--在出现什么级别的错误才记录错误 【注意:如果有多个appender-ref的时候,应该给他们放到同一个root节点下】-->  
  100.     <root>  
  101.       <level value="ALL" />    
  102.       <appender-ref ref="LogFileAppender"/>  
  103.       <appender-ref ref="ADONetAppender_SqlServer"/>  
  104.     </root>  
  105.   
  106.   </log4net>  
  107. </configuration>  
如果项目是webForm应用程序,那么可以在根目录下找到Properties文件下面的AssemblyInfo.cs类。打开它,AssemblyInfo.cs类的最后面添加一段代码:如下:

[csharp]  view plain  copy
  1. //ConfigFile="log4net.config"表示:我们配置文件的路径为网站根目录下的mylognet4.config这个配置文件,这样程序运行的时候就会按照这个路径来读取这个配置文件  
  2. //Watch:log4net框架用这个属性来确定是否需要在运行时监视文件的改变,如果这个属性为true,那么FilsSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。(即:如果这个配置文件发生变化的时候它是否自适应这个变化,也就是说它会自动的去读取这个变化,而不需要重新启动这个正在运行的这个web应用程序)  
  3.   
  4. //其实如果我们吧log4net的配置文件直接配置在web.config文件里,这里就不需要在配置了。这里之所以需要配置是因为我们是独立建立的一个log4net配置文件,为了让它与我们的程序关联起来,在这里,需要对我们建立的log4net配置文件进行读取,加载到我们的程序当中  
  5.   
  6. [assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch = true)]  
那如果项目不是webForm应用程序,或者项目中没有AssemblyInfo.cs这个类,怎么办呢? 答:那我们可以在项目跟目录下创建一个Global.asax文件

在Global.asax文件的protected void Application_Start(object sender, EventArgs e)方法中添加一段代码,代码如下:

[csharp]  view plain  copy
  1. protected void Application_Start(object sender, EventArgs e)  
  2. {  
  3.     string filePath = Server.MapPath("~/log4net.config");  
  4.     FileInfo fil = new FileInfo(filePath);  
  5.   
  6.     log4net.Config.XmlConfigurator.Configure(fil); //将创建的log4net.config文件加载我到我们的项目中来  
  7.   
  8.     //其实以上三句代码可以用下面这一句替代  
  9.     //log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/log4net.config")));   
  10. }  
注意:我们上面的两段代码主要的功能就是将我们新建的log4net.config这个配置文件加载到我们的项目中去(因为我们新建的log4net.config配置文件与我们项目是没有关系的,所以这里需要将它加载到我们的项目中去)如果在AssemblyInfo.cs文件中加载了,就不需要在Global.asax文件里再加载一次了。(根据爱好,两者选其一)


在项目中添加WebForm1.aspx文件,我们拖一个button控件到我们的WebForm1.aspx页面中来,button控件 命名 ”请点击按钮,测试错误“

双击button控件,给它添加单击事件,代码如下:

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.UI;  
  6. using System.Web.UI.WebControls;  
  7. using log4net;  
  8. using System.Reflection;  
  9. namespace WebTest  
  10. {  
  11.     public partial class WebForm1 : System.Web.UI.Page  
  12.     {  
  13.         protected void Page_Load(object sender, EventArgs e)  
  14.         {  
  15.   
  16.         }  
  17.         protected void Button1_Click(object sender, EventArgs e)  
  18.         {  
  19.             int x = 6;  
  20.             int y = 0;  
  21.             try  
  22.             {  
  23.                 int z = x / y;   
  24.             }  
  25.             catch (Exception ex)  
  26.             {  
  27.                 //Getlogger()静态方法,用来检索框架里是否存在logger对象,如果不存在就创建一个名字为logger的对象  
  28.                 //log4net.ILog log = log4net.LogManager.GetLogger("WebLogger");//这个WebLogger其实就是配置文件中的logger的name属性名称。它代表的是错误的类名  
  29.   
  30.                 log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);//自获取出错的类  
  31.                 if (log.IsErrorEnabled)  
  32.                 {  
  33.                     log.Error("错误:"+ex.Message,ex);  
  34.                 }  
  35.                 Response.Write("OK");  
  36.             }  
  37.         }  
  38.     }  
  39. }  

然后我们在数据中新建一个表 命名为 xlog  表结构如下:



好了。现在可以看测试效果了,运行我们的项目。 


点击页面上的按钮。 然后我们再去我们数据库中的xlog表中查看一下数据,发现已经有一条错误日记写入到表中了。

我们再去项目所在的磁盘目录下  ,在项目文件夹下面我们看到生成了一个log文件夹,在log文件夹下面有一个loginfo文件夹,loginfo文件夹下面有一个以当前日期命名的txt文件,这个文件就是我们刚刚生成的错误日记了。打开看一下:


//------------参考,在MVC中使用log4net


猜你喜欢

转载自blog.csdn.net/u011966339/article/details/80221310