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事件中寫入
- 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 =
這裡有個地方需要注意
如果我的主專案是純粹的程式碼分離後的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檔案, 是因為這樣可以單獨修改除錯部署,也就是非侵入式安裝的思想。呵呵。
內容大概如下:
[xhtml] view plain copy print ?
- <?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 ?- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- SET ANSI_PADDING ON
- GO
- 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,
- 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]
- GO
- SET ANSI_PADDING OFF
- GO
- ALTER TABLE [dbo].[ErrorLog] ADD DEFAULT (getdate()) FOR [dtDate]
- GO
第四步:在需要記錄的每個類中新增如下程式碼
[c-sharp] view plain copy print ?- 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
- }
- }
記錄的樣式如下:
[xhtml] view plain copy print ?- 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]