log4net.config 將日記同時寫入到數據庫和文件當中
來源:程序員人生 發布時間:2015-05-07 09:38:27 閱讀次數:4253次
《1》
1》在項目中新建新建1個log4net.config的配置文件。
2》從log4net官網下面log4net的文件包,然后在包的bin文件夾下的net文件夾中的4.0文件夾中找到log4net.dll文件,然后將它引入到我們的項目中來
<?xml version="1.0" encoding="utf⑻"?>
<configuration>
<configSections>
<!--配置1個結點 名稱為log4net-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!--寫入到文件-->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
<!--文件路徑,如果RollingStyle為Composite或Date,則這里設置為目錄,文件名在DatePattern里設置,其他則這里要有文件名。已擴大支持虛擬目錄-->
<param name="File" value="LogLogInfo" /><!--將日記寫入到跟目錄下面的Log文件夾下面的LogInfo文件夾下面的yyyy-MM-dd.TXT文件中-->
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaximumFileSize" value="10240KB" />
<param name="StaticLogFileName" value="false" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd.TXT" /> <!--TXT后綴必須是大寫的,否則有問題-->
<param name="CountDirection" value="⑴" />
<!--log4net記錄毛病的格式(即:用甚么樣的格式(布局)來記錄毛病)-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value=" 【時間】:%d%n 【級別】:%p%n 【類名】:%c%n 【線程ID】: %thread %n 【文件地址】:%F 第%L行%n 【日志內容】:%m%n 【日記詳細】:%exception %n---------------------------------------------------------------------------------------------------------------%n" />
</layout>
</appender>
<!--將日記寫入
數據庫-->
<appender name="ADONetAppender_SqlServer" type="log4net.Appender.ADONetAppender">
<bufferSize value="0" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<!--<connectionString value="SERVER=FB-VAIO;DATABASE=sales;UID=sa;PWD=123456;Connect Timeout=15;" />-->
<connectionString value="Data Source=FB-VAIO;Initial Catalog=sales;Integrated Security=SSPI;Connect Timeout=15;" />
<commandText value="INSERT INTO xlog ([Date],[Thread],[Level],[logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<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="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m"/>
</layout>
</parameter>
<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout">
<conversionPattern value="%exception"/>
</layout>
</parameter>
</appender>
<!--在出現甚么級別的毛病才記錄毛病 【注意:如果有多個appender-ref的時候,應當給他們放到同1個root節點下】-->
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="ADONetAppender_SqlServer"/>
</root>
</log4net>
</configuration>
如果項目是webForm利用程序,那末可以在根目錄下找到Properties文件下面的AssemblyInfo.cs類。打開它,AssemblyInfo.cs類的最后面添加1段代碼:以下:
//ConfigFile="log4net.config"表示:我們配置文件的路徑為網站根目錄下的mylognet4.config這個配置文件,這樣程序運行的時候就會依照這個路徑來讀取這個配置文件
//Watch:log4net框架用這個屬性來肯定是不是需要在運行時監視文件的改變,如果這個屬性為true,那末FilsSystemWatcher將會被用來監視文件的改變,重命名,刪除等事件。(即:如果這個配置文件產生變化的時候它是不是自適應這個變化,也就是說它會自動的去讀取這個變化,而不需要重新啟動這個正在運行的這個web利用程序)
//其實如果我們吧log4net的配置文件直接配置在web.config文件里,這里就不需要在配置了。這里之所以需要配置是由于我們是獨立建立的1個log4net配置文件,為了讓它與我們的程序關聯起來,在這里,需要對我們建立的log4net配置文件進行讀取,加載到我們的程序當中
[assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch = true)]
那如果項目不是webForm利用程序,或項目中沒有AssemblyInfo.cs這個類,怎樣辦呢? 答:那我們可以在項目跟目錄下創建1個Global.asax文件
在Global.asax文件的protected void Application_Start(object sender, EventArgs e)方法中添加1段代碼,代碼以下:
protected void Application_Start(object sender, EventArgs e)
{
string filePath = Server.MapPath("~/log4net.config");
FileInfo fil = new FileInfo(filePath);
log4net.Config.XmlConfigurator.Configure(fil); //將
//其實以上3句代碼可以用下面這1句替換
//log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/log4net.config")));
}
注意:我們上面的兩段代碼主要的功能就是將我們新建的log4net.config這個配置文件加載到我們的項目中去(由于我們新建的log4net.config配置文件與我們項目是沒有關系的,所以這里需要將它加載到我們的項目中去)如果在AssemblyInfo.cs文件中加載了,就不需要在Global.asax文件里再加載1次了。(根據愛好,二者選其1)
在項目中添加WebForm1.aspx文件,我們拖1個button控件到我們的WebForm1.aspx頁面中來,button控件 命名 ”請點擊按鈕,測試毛病“
雙擊button控件,給它添加單擊事件,代碼以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using log4net;
using System.Reflection;
namespace WebTest
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
int x = 6;
int y = 0;
try
{
int z = x / y;
}
catch (Exception ex)
{
//Getlogger()靜態方法,用來檢索框架里是不是存在logger對象,如果不存在就創建1個名字為logger的對象
//log4net.ILog log = log4net.LogManager.GetLogger("WebLogger");//這個WebLogger其實就是配置文件中的logger的name屬性名稱。它代表的是毛病的類名
log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);//自獲得出錯的類
if (log.IsErrorEnabled)
{
log.Error("毛病:"+ex.Message,ex);
}
Response.Write("OK");
}
}
}
}
然后我們在數據中新建1個表 命名為 xlog 表結構以下:

好了。現在可以看測試效果了,運行我們的項目。

點擊頁面上的按鈕。 然后我們再去我們數據庫中的xlog表中查看1下數據,發現已有1條毛病日記寫入到表中了。

我們再去項目所在的磁盤目錄下 ,在項目文件夾下面我們看到生成了1個log文件夾,在log文件夾下面有1個loginfo文件夾,loginfo文件夾下面有1個以當前日期命名的txt文件,這個文件就是我們剛剛生成的毛病日記了。打開看1下:

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈