asp.net利用log4net写入日志到SqlServer数据库[整理]
asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。
第一步:下载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.config在主项目根目录下:与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 ILog logger = LogManager.GetLogger(typeof(类名称));
给出一个例子
private
void TestLog()
{
try
{
//
}
catch
(Exception ex)
{
logger.Error("出错:", ex);
#endregion
}
}
<bufferSize value="10" />,表示是记录10 条到缓冲区,满10条后再写入SQL server
调试时可以改为1,实际应用建议为100
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。