首页  ·  知识 ·  云计算
asp.net利用log4net写入日志到SqlServer数据库
网友  博客园 | http://kb.cnblogs.com/page/76919/  综合  编辑:德仔   图片来源:网络
 asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面就我的安装部署
 asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面就我的安装部署log4net到MS sql server的经验与大家分享。

  下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入

protected   void  Application_Start(Object sender, EventArgs e) 
        { //
            log4net.Config.XmlConfigurator.Configure( new  System.IO.FileInfo( "log4net.config" ));
        }

在这个项目对应的Assembly.cs文件中添加一行

[assembly: log4net.Config.XmlConfigurator(ConfigFile =  "log4net.config" , Watch =  true )] 

 

这里有个地方需要注意

  如果我的主项目是纯粹的代码分离后的aspx\ascx文件, 不含cs文件,那么中需要在饱含cs文件的项目(比如common.web.csproj)文件中添加这两行代码

  举个例子

  解决方案如下:

MySolution.Sln

       |-----common.Web.csproj(包含cs文件)

       |-----Business1.Web.csproj(包含cs文件,继承自common.Web.csproj)

       |-----Business********.Web.csproj(包含cs文件,继承自common.Web.csproj)

       |-----BusinessX.Web.csproj(包含cs文件,继承自common.Web.csproj)

    |-----MainWeb.csproj(不包含cs文件)

  此时, 只需要在 common.Web.csproj 中做以上动作就可以了!其他项目只需要引用 dll即可。

  第三步:添加logn4net.confgi在主项目根目录下:与web.config同路径,之所以不写入web,config文件, 是因为这样可以单独修改调试部署,也就是非侵入式安装的思想。呵呵。

  内容大概如下:

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <!--Log4net Begin by Tony  2008.11.20--> 
    <log4net> 
        <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 
            <bufferSize value="10" /> 
            <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
            <connectionString value="DATABASE=DBErrorLogs;SERVER=myserver;UID=user;PWD=pwdpwd;Connect Timeout=15;" /> 
            <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) 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="100" /> 
                <layout type="log4net.Layout.PatternLayout"> 
                    <conversionPattern value="%t" /> 
                </layout> 
            </parameter> 
            <parameter> 
                <parameterName value="@log_level" /> 
                <dbType value="String" /> 
                <size value="200" /> 
                <layout type="log4net.Layout.PatternLayout"> 
                    <conversionPattern value="%p" /> 
                </layout> 
            </parameter> 
            <parameter> 
                <parameterName value="@logger" /> 
                <dbType value="String" /> 
                <size value="500" /> 
                <layout type="log4net.Layout.PatternLayout"> 
                    <conversionPattern value="%logger" /> 
                </layout> 
            </parameter> 
           <parameter> 
                <parameterName value="@message" /> 
                <dbType value="String" /> 
                <size value="3000" /> 
                <layout type="log4net.Layout.PatternLayout"> 
                    <conversionPattern value="%m" /> 
                </layout> 
            </parameter> 
            <parameter> 
                <parameterName value="@exception" /> 
                <dbType value="String" /> 
                <size value="4000" /> 
                <layout type="log4net.Layout.ExceptionLayout" /> 
            </parameter> 
        </appender> 
        <!-- setup the root category, add the appenders and set the default level --> 
        <root> 
            <level value="WARN"/> 
            <level value="INFO"/> 
            <level value="DEBUG"/> 
            <level value="FINE"/> 
            <appender-ref ref="ADONetAppender" /> 
        </root> 
        <!-- specify the level for some specific categories --> 
        <logger name="iNotes"> 
            <level value="WARN"/> 
            <level value="INFO"/> 
            <level value="DEBUG"/> 
            <level value="FINE"/> 
            <appender-ref ref="ADONetAppender"/> 
        </logger> 
        <logger name="StellaLogger"> 
            <level value="ALL"/> 
            <appender-ref ref="AdoNetAppender" /> 
        </logger> 
    </log4net> 
    <!--Log4net End--> 
</configuration> 

基本完成了!需要注意的一个参数

数据库生成脚本

CREATE TABLE [dbo].[ErrorLog](  
    [nId] [bigint] IDENTITY(1,1) NOT NULL,  
    [dtDate] [datetime] NOT NULL,  
    [sThread] [varchar](100) NOT NULL,  
    [sLevel] [varchar](200) NOT NULL,  
    [sLogger] [varchar](500) NOT NULL,  
    [sMessage] [varchar](3000) NOT NULL,  
    [sException] [varchar](4000) NULL)

第四步:在需要记录的每个类中添加如下代码

private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

给出一个例子

private void TestLog()  
        {  
            try 
            {  
                //  
            }  
            catch (Exception ex)  
            {  
                Loghandle by Tony 2008.11.21#region Loghandle by Tony 2008.11.21  
                string loginid = EmptyString;  
                //if (user != null) { loginid = user.LoginID; }  
                myLogger.Error(GetErrorMessage(loginid, 1), ex);  
                //Debug("系统已记录错误,请联系管理员!"); return;  
                //Debug(ErrorHandle.GetErrorInfoByID(999), this.ClientID); return; 
                #endregion  
            }  
        } 

<bufferSize value="10" />,表示是记录10 条到缓冲区,满10条后再写入SQL server

  调试时可以改为1,实际应用建议为100

 

本文作者:网友 来源:博客园 | http://kb.cnblogs.com/page/76919/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读