Log4Net ,.net和SQL Server的完美结合
生活随笔
收集整理的這篇文章主要介紹了
Log4Net ,.net和SQL Server的完美结合
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
參考鄭大哥的這篇文章,http://www.cnblogs.com/zhengyun_ustc/archive/2005/07/19/196049.html
不過,我在我這個項目中,具體使用的方法有點不同。
這個學(xué)生處學(xué)生信息管理系統(tǒng),業(yè)務(wù)日志比較簡單,其實并不需要使用log4net。所以在這個項目中,只用log4net來記錄錯誤日志。
1.建立配置文件。以下配置,是把信息記錄到數(shù)據(jù)庫和一個以當(dāng)前日期為名字的日志txt文件。從數(shù)據(jù)庫的insert語句就可以看出數(shù)據(jù)庫的
Code
<?xml?version="1.0"?encoding="utf-8"??>
<configuration>
??<configSections>
????????<section?name="log4net"?type="log4net.Config.Log4NetConfigurationSectionHandler,?log4net"/>
????</configSections>
??<log4net>
????<appender?name="ADONetAppender"?type="log4net.Appender.AdoNetAppender">
??????<bufferSize?value="1"?/>
??????<connectionType?value="System.Data.SqlClient.SqlConnection,?System.Data,?Version=1.0.3300.0,?Culture=neutral,?PublicKeyToken=b77a5c561934e089"?/>
??????<connectionString?value="server=codebase;database=StuDepartmentOA;uid=sadis;pwd=123;timeout=300;"?/>
??????<commandText?value="INSERT?INTO?ErrLog?([Time],[errLevel],[Info],[Exception])?VALUES?(@time,?@level,?@info,?@exception)"?/>
??????<parameter>
????????<parameterName?value="@time"?/>
????????<dbType?value="DateTime"?/>
????????<layout?type="log4net.Layout.RawTimeStampLayout"?/>
??????</parameter>
??????<parameter>
????????<parameterName?value="@level"?/>
????????<dbType?value="String"?/>
????????<size?value="8"?/>
????????<layout?type="log4net.Layout.PatternLayout">
??????????<conversionPattern?value="%p"?/>
????????</layout>
??????</parameter>
??????<parameter>
????????<parameterName?value="@info"?/>
????????<dbType?value="String"?/>
????????<size?value="200"?/>
????????<layout?type="log4net.Layout.PatternLayout">
??????????<conversionPattern?value="%m"?/>
????????</layout>
??????</parameter>
??????<parameter>
????????<parameterName?value="@exception"?/>
????????<dbType?value="String"?/>
????????<size?value="1000"?/>
????????<layout?type="log4net.Layout.PatternLayout">
??????????<conversionPattern?value="%exception"?/>
????????</layout>
??????</parameter>
????</appender>
????<appender?name="FileErrLogAppender"?type="log4net.Appender.RollingFileAppender">
??????<!--日志文件的存儲路徑-->
??????<file?value="bin\Log\"/>
??????<appendToFile?value="true"/>
??????<rollingStyle?value="Date"/>
??????<datePattern?value="yyyy-MM-dd.LOG"/>
??????<!--根據(jù)日期,定義文件名-->
??????<staticLogFileName?value="false"/>
??????<!--日志文件輸出格式-->
??????<layout??type="log4net.Layout.PatternLayout">
????????<param?name="Header"?value="[Header]"/>
????????<param?name="Footer"?value="[Footer]"/>
????????<ConversionPattern?value="%nTime:?%d?%n?Level:?%level???Info:?%message?%nException:?%exception"/>
??????</layout>
????</appender>
????<!--?Setup?the?root?category,?add?the?appenders?and?set?the?default?level?-->
????<root>
??????<level?value="WARN"/>
??????<level?value="INFO"/>
??????<level?value="DEBUG"/>
????</root>
????<!--?Specify?the?level?for?some?specific?categories?-->
????<logger?name="logger">
??????<level?value="WARN"/>
??????<level?value="INFO"/>
??????<level?value="DEBUG"/>
??????<appender-ref?ref="FileErrLogAppender"/>??
??????<appender-ref?ref="ADONetAppender"?/>
????</logger>
??</log4net>
</configuration>
對應(yīng)的數(shù)據(jù)庫表:
Code
USE?[StuDepartmentOA]
GO
/******?對象:??Table?[dbo].[ErrLog]????腳本日期:?08/16/2009?10:09:31?******/
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
SET?ANSI_PADDING?ON
GO
CREATE?TABLE?[dbo].[ErrLog](
????[ID]?[int]?IDENTITY(1,1)?NOT?NULL,
????[time]?[datetime]?NOT?NULL,
????[errLevel]?[varchar](8)?COLLATE?Chinese_PRC_CI_AS?NOT?NULL,
????[info]?[nvarchar](200)?COLLATE?Chinese_PRC_CI_AS?NOT?NULL,
????[exception]?[varchar](1000)?COLLATE?Chinese_PRC_CI_AS?NULL,
?CONSTRAINT?[PK_errLog]?PRIMARY?KEY?CLUSTERED?
(
????[ID]?ASC
)WITH?(IGNORE_DUP_KEY?=?OFF)?ON?[PRIMARY]
)?ON?[PRIMARY]
GO
SET?ANSI_PADDING?OFF
2.把配置文件放到Web目錄下,跟web.config同一層。
3.建立globe.asax文件,在Application_Start中加入
log4net.Config.XmlConfigurator.ConfigureAndWatch(new?System.IO.FileInfo(Server.MapPath("~")?+?@"\log4net.config"));
4.再加入相應(yīng)的引用。然后如果項目中有其他類庫,那么再在對應(yīng)用到的類庫中加入引用。
(!!這里需要注意的是,如果用了NHibernate,就需要注意了,必須加入對應(yīng)版本的log4net,不然會出錯。我本來加了一個1.2.9的log4net,但NHibernate默認(rèn)用附帶的1.2.10,運行時就報錯了)
5.實際使用:
Code
using?System;
using?log4net;
namespace?DAL
{
????///?<summary>
????///?LogHelper?的摘要說明
????///?</summary>
????public?class?LogHelper
????{
????????private?static?ILog?Logger?=?log4net.LogManager.GetLogger("logger");
????????public?static?void?Debug(string?message,?Exception?ex)
????????{
????????????if(Logger.IsDebugEnabled)
????????????{
????????????????Logger.Debug(message,?ex);
????????????}
????????}
????????public?static?void?Debug(string?message)
????????{
????????????if?(Logger.IsDebugEnabled)
????????????{
????????????????Logger.Debug(message);
????????????}
????????}
????????public?static?void?Info(string?message,?Exception?ex)
????????{
????????????if(Logger.IsInfoEnabled)
????????????{
????????????????Logger.Info(message,?ex);
????????????}
????????}
????????public?static?void?Info(string?message)
????????{
????????????if?(Logger.IsInfoEnabled)
????????????{
????????????????Logger.Info(message);
????????????}
????????}
????????public?static?void?Error(string?message,?Exception?ex)
????????{
????????????if?(Logger.IsErrorEnabled)
????????????{
????????????????Logger.Error(message,ex);
????????????}
????????}
????????public?static?void?Error(string?message)
????????{
????????????if?(Logger.IsErrorEnabled)
????????????{
????????????????Logger.Error(message);
????????????}
????????}
????}
}
不過,我在我這個項目中,具體使用的方法有點不同。
這個學(xué)生處學(xué)生信息管理系統(tǒng),業(yè)務(wù)日志比較簡單,其實并不需要使用log4net。所以在這個項目中,只用log4net來記錄錯誤日志。
1.建立配置文件。以下配置,是把信息記錄到數(shù)據(jù)庫和一個以當(dāng)前日期為名字的日志txt文件。從數(shù)據(jù)庫的insert語句就可以看出數(shù)據(jù)庫的
Code
<?xml?version="1.0"?encoding="utf-8"??>
<configuration>
??<configSections>
????????<section?name="log4net"?type="log4net.Config.Log4NetConfigurationSectionHandler,?log4net"/>
????</configSections>
??<log4net>
????<appender?name="ADONetAppender"?type="log4net.Appender.AdoNetAppender">
??????<bufferSize?value="1"?/>
??????<connectionType?value="System.Data.SqlClient.SqlConnection,?System.Data,?Version=1.0.3300.0,?Culture=neutral,?PublicKeyToken=b77a5c561934e089"?/>
??????<connectionString?value="server=codebase;database=StuDepartmentOA;uid=sadis;pwd=123;timeout=300;"?/>
??????<commandText?value="INSERT?INTO?ErrLog?([Time],[errLevel],[Info],[Exception])?VALUES?(@time,?@level,?@info,?@exception)"?/>
??????<parameter>
????????<parameterName?value="@time"?/>
????????<dbType?value="DateTime"?/>
????????<layout?type="log4net.Layout.RawTimeStampLayout"?/>
??????</parameter>
??????<parameter>
????????<parameterName?value="@level"?/>
????????<dbType?value="String"?/>
????????<size?value="8"?/>
????????<layout?type="log4net.Layout.PatternLayout">
??????????<conversionPattern?value="%p"?/>
????????</layout>
??????</parameter>
??????<parameter>
????????<parameterName?value="@info"?/>
????????<dbType?value="String"?/>
????????<size?value="200"?/>
????????<layout?type="log4net.Layout.PatternLayout">
??????????<conversionPattern?value="%m"?/>
????????</layout>
??????</parameter>
??????<parameter>
????????<parameterName?value="@exception"?/>
????????<dbType?value="String"?/>
????????<size?value="1000"?/>
????????<layout?type="log4net.Layout.PatternLayout">
??????????<conversionPattern?value="%exception"?/>
????????</layout>
??????</parameter>
????</appender>
????<appender?name="FileErrLogAppender"?type="log4net.Appender.RollingFileAppender">
??????<!--日志文件的存儲路徑-->
??????<file?value="bin\Log\"/>
??????<appendToFile?value="true"/>
??????<rollingStyle?value="Date"/>
??????<datePattern?value="yyyy-MM-dd.LOG"/>
??????<!--根據(jù)日期,定義文件名-->
??????<staticLogFileName?value="false"/>
??????<!--日志文件輸出格式-->
??????<layout??type="log4net.Layout.PatternLayout">
????????<param?name="Header"?value="[Header]"/>
????????<param?name="Footer"?value="[Footer]"/>
????????<ConversionPattern?value="%nTime:?%d?%n?Level:?%level???Info:?%message?%nException:?%exception"/>
??????</layout>
????</appender>
????<!--?Setup?the?root?category,?add?the?appenders?and?set?the?default?level?-->
????<root>
??????<level?value="WARN"/>
??????<level?value="INFO"/>
??????<level?value="DEBUG"/>
????</root>
????<!--?Specify?the?level?for?some?specific?categories?-->
????<logger?name="logger">
??????<level?value="WARN"/>
??????<level?value="INFO"/>
??????<level?value="DEBUG"/>
??????<appender-ref?ref="FileErrLogAppender"/>??
??????<appender-ref?ref="ADONetAppender"?/>
????</logger>
??</log4net>
</configuration>
對應(yīng)的數(shù)據(jù)庫表:
Code
USE?[StuDepartmentOA]
GO
/******?對象:??Table?[dbo].[ErrLog]????腳本日期:?08/16/2009?10:09:31?******/
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
SET?ANSI_PADDING?ON
GO
CREATE?TABLE?[dbo].[ErrLog](
????[ID]?[int]?IDENTITY(1,1)?NOT?NULL,
????[time]?[datetime]?NOT?NULL,
????[errLevel]?[varchar](8)?COLLATE?Chinese_PRC_CI_AS?NOT?NULL,
????[info]?[nvarchar](200)?COLLATE?Chinese_PRC_CI_AS?NOT?NULL,
????[exception]?[varchar](1000)?COLLATE?Chinese_PRC_CI_AS?NULL,
?CONSTRAINT?[PK_errLog]?PRIMARY?KEY?CLUSTERED?
(
????[ID]?ASC
)WITH?(IGNORE_DUP_KEY?=?OFF)?ON?[PRIMARY]
)?ON?[PRIMARY]
GO
SET?ANSI_PADDING?OFF
2.把配置文件放到Web目錄下,跟web.config同一層。
3.建立globe.asax文件,在Application_Start中加入
log4net.Config.XmlConfigurator.ConfigureAndWatch(new?System.IO.FileInfo(Server.MapPath("~")?+?@"\log4net.config"));
4.再加入相應(yīng)的引用。然后如果項目中有其他類庫,那么再在對應(yīng)用到的類庫中加入引用。
(!!這里需要注意的是,如果用了NHibernate,就需要注意了,必須加入對應(yīng)版本的log4net,不然會出錯。我本來加了一個1.2.9的log4net,但NHibernate默認(rèn)用附帶的1.2.10,運行時就報錯了)
5.實際使用:
Code
using?System;
using?log4net;
namespace?DAL
{
????///?<summary>
????///?LogHelper?的摘要說明
????///?</summary>
????public?class?LogHelper
????{
????????private?static?ILog?Logger?=?log4net.LogManager.GetLogger("logger");
????????public?static?void?Debug(string?message,?Exception?ex)
????????{
????????????if(Logger.IsDebugEnabled)
????????????{
????????????????Logger.Debug(message,?ex);
????????????}
????????}
????????public?static?void?Debug(string?message)
????????{
????????????if?(Logger.IsDebugEnabled)
????????????{
????????????????Logger.Debug(message);
????????????}
????????}
????????public?static?void?Info(string?message,?Exception?ex)
????????{
????????????if(Logger.IsInfoEnabled)
????????????{
????????????????Logger.Info(message,?ex);
????????????}
????????}
????????public?static?void?Info(string?message)
????????{
????????????if?(Logger.IsInfoEnabled)
????????????{
????????????????Logger.Info(message);
????????????}
????????}
????????public?static?void?Error(string?message,?Exception?ex)
????????{
????????????if?(Logger.IsErrorEnabled)
????????????{
????????????????Logger.Error(message,ex);
????????????}
????????}
????????public?static?void?Error(string?message)
????????{
????????????if?(Logger.IsErrorEnabled)
????????????{
????????????????Logger.Error(message);
????????????}
????????}
????}
}
轉(zhuǎn)載于:https://www.cnblogs.com/kenkofox/archive/2009/08/12/1544501.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Log4Net ,.net和SQL Server的完美结合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (zz)Sql Server 2005中
- 下一篇: 学习Mysql命令行