log4net写入到SQL server的基本配置 downmoon)

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。

下面汇报一下我的安装部署log4net到MS sql server的经验。

一、首先是下载log4net最新版

地址:http://logging.apache.org/log4net/ 

直接引用dll也行,我是把下载的源码在Vs2005下编译成log4net.dll

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

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

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

  1. [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文件, 是因为这样可以单独修改调试部署,也就是非侵入式安装的思想。呵呵。

内容大概如下:

  1. <?xml version="1.0"?>  
  2. <configuration>  
  3.     <configSections>  
  4.         <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />  
  5.     </configSections>  
  6.     <!--Log4net Begin by Tony  2008.11.20-->  
  7.     <log4net>  
  8.         <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">  
  9.             <bufferSize value="10" />  
  10.             <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  11.             <connectionString value="DATABASE=DBErrorLogs;SERVER=myserver;UID=user;PWD=pwdpwd;Connect Timeout=15;" />  
  12.             <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  13.             <parameter>  
  14.                 <parameterName value="@log_date" />  
  15.                 <dbType value="DateTime" />  
  16.                 <layout type="log4net.Layout.RawTimeStampLayout" />  
  17.             </parameter>  
  18.             <parameter>  
  19.                 <parameterName value="@thread" />  
  20.                 <dbType value="String" />  
  21.                 <size value="100" />  
  22.                 <layout type="log4net.Layout.PatternLayout">  
  23.                     <conversionPattern value="%t" />  
  24.                 </layout>  
  25.             </parameter>  
  26.             <parameter>  
  27.                 <parameterName value="@log_level" />  
  28.                 <dbType value="String" />  
  29.                 <size value="200" />  
  30.                 <layout type="log4net.Layout.PatternLayout">  
  31.                     <conversionPattern value="%p" />  
  32.                 </layout>  
  33.             </parameter>  
  34.             <parameter>  
  35.                 <parameterName value="@logger" />  
  36.                 <dbType value="String" />  
  37.                 <size value="500" />  
  38.                 <layout type="log4net.Layout.PatternLayout">  
  39.                     <conversionPattern value="%logger" />  
  40.                 </layout>  
  41.             </parameter>  
  42.             <parameter>  
  43.                 <parameterName value="@message" />  
  44.                 <dbType value="String" />  
  45.                 <size value="3000" />  
  46.                 <layout type="log4net.Layout.PatternLayout">  
  47.                     <conversionPattern value="%m" />  
  48.                 </layout>  
  49.             </parameter>  
  50.             <parameter>  
  51.                 <parameterName value="@exception" />  
  52.                 <dbType value="String" />  
  53.                 <size value="4000" />  
  54.                 <layout type="log4net.Layout.ExceptionLayout" />  
  55.             </parameter>  
  56.         </appender>  
  57.         <!-- setup the root category, add the appenders and set the default level -->  
  58.         <root>  
  59.             <level value="WARN"/>  
  60.             <level value="INFO"/>  
  61.             <level value="DEBUG"/>  
  62.             <level value="FINE"/>  
  63.             <appender-ref ref="ADONetAppender" />  
  64.         </root>  
  65.         <!-- specify the level for some specific categories -->  
  66.         <logger name="iNotes">  
  67.             <level value="WARN"/>  
  68.             <level value="INFO"/>  
  69.             <level value="DEBUG"/>  
  70.             <level value="FINE"/>  
  71.             <appender-ref ref="ADONetAppender"/>  
  72.         </logger>  
  73.         <logger name="StellaLogger">  
  74.             <level value="ALL"/>  
  75.             <appender-ref ref="AdoNetAppender" />  
  76.         </logger>  
  77.     </log4net>  
  78.     <!--Log4net End-->  
  79. </configuration>  
<?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>

 

具体的可以看看官方文档

http://logging.apache.org/log4net/release/sdk/index.html

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

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

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

数据库生成脚本

[python] view plain copy print ?
  1. SET ANSI_NULLS ON  
  2. GO  
  3. SET QUOTED_IDENTIFIER ON  
  4. GO  
  5. SET ANSI_PADDING ON  
  6. GO  
  7. CREATE TABLE [dbo].[ErrorLog](  
  8.     [nId] [bigint] IDENTITY(1,1) NOT NULL,  
  9.     [dtDate] [datetime] NOT NULL,  
  10.     [sThread] [varchar](100) NOT NULL,  
  11.     [sLevel] [varchar](200) NOT NULL,  
  12.     [sLogger] [varchar](500) NOT NULL,  
  13.     [sMessage] [varchar](3000) NOT NULL,  
  14.     [sException] [varchar](4000) NULL,  
  15.  CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED   
  16. (  
  17.     [nId] ASC  
  18. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
  19. ) ON [PRIMARY]  
  20. GO  
  21. SET ANSI_PADDING OFF  
  22. GO  
  23. ALTER TABLE [dbo].[ErrorLog] ADD  DEFAULT (getdate()) FOR [dtDate]  
  24. GO  
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE 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, CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED (    [nId] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[ErrorLog] ADD  DEFAULT (getdate()) FOR [dtDate]GO

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

[c-sharp] view plain copy print ?
  1. 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);

给出一个例子

[c-sharp] view plain copy print ?
  1. private void TestLog()  
  2.         {  
  3.             try  
  4.             {  
  5.                 //  
  6.             }  
  7.             catch (Exception ex)  
  8.             {  
  9.                 Loghandle by Tony 2008.11.21#region Loghandle by Tony 2008.11.21  
  10.                 string loginid = EmptyString;  
  11.                 //if (user != null) { loginid = user.LoginID; }  
  12.                 myLogger.Error(GetErrorMessage(loginid, 1), ex);  
  13.                 //Debug("系统已记录错误,请联系管理员!"); return;  
  14.                 //Debug(ErrorHandle.GetErrorInfoByID(999), this.ClientID); return;  
  15.                 #endregion  
  16.             }  
  17.              
  18.         }  
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            }                   }

 记录的样式如下:

  1. table><tr><td>nId</td>        
  2.    <td>dtDate</td> <td>sThread</td> <td>sLevel</td> <td>sLogger</td> <td>sMessage</td> <td>sException</td>  
  3.    </tr>  
  4.    <tr><td>1        </td>  
  5.      
  6.    <td>2008-11-21 11:03:20.470</td> <td>1904</td> <td>ERROR Agronet.Product.Web.UI.Controls.Vegnet.Detail</td> <td>10.103.33.10</td> <td>System.OverflowException: 值对于 Int16 太大或太小。</td> <td> ---> System.OverflowException: 值对于 Int32 太大或太小。 在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) --- 内部异常堆栈跟踪的结尾 --- 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s) 在 Agronet.Product.Web.UI.Controls.Vegnet.Detail.BindList() 位置 P:/Test/Web/UI/Controls/Vegnet/Detail.cs:行号 141</td>  
  7.    </tr></table>  
table><tr><td>nId</td>         <td>dtDate</td> <td>sThread</td> <td>sLevel</td> <td>sLogger</td> <td>sMessage</td> <td>sException</td>   </tr>   <tr><td>1        </td>      <td>2008-11-21 11:03:20.470</td> <td>1904</td> <td>ERROR Agronet.Product.Web.UI.Controls.Vegnet.Detail</td> <td>10.103.33.10</td> <td>System.OverflowException: 值对于 Int16 太大或太小。</td> <td> ---> System.OverflowException: 值对于 Int32 太大或太小。 在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) --- 内部异常堆栈跟踪的结尾 --- 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s) 在 Agronet.Product.Web.UI.Controls.Vegnet.Detail.BindList() 位置 P:/Test/Web/UI/Controls/Vegnet/Detail.cs:行号 141</td>   </tr></table>

OK! 结束,

Any Question ,Please Mail to tony(邀月)[email protected]

写入文件请看这里

     log4net写入日志文件示例

助人等于自助!   [email protected]

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/gfuugfdkkn/article/details/84101928
今日推荐