asp.net利用log4net写入日志到SqlServer数据库
asp.net利用log4net写入日志到SqlServer数据库
asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面就我的安装部署log4net到MS sql server的经验与大家分享。
下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入
1
2
3
4
|
protected void Application_Start( Object sender, EventArgs e) { // log4net.Config.XmlConfigurator.Configure( new System.IO.FileInfo( "log4net.config" )); } |
在这个项目对应的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<? 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 > |
基本完成了!需要注意的一个参数
数据库生成脚本
1
2
3
4
5
6
7
8
|
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 ) |
第四步:在需要记录的每个类中添加如下代码
1
|
private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
给出一个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。