[C#]log4net 写 SQLServer 数据库日志的配置方法
编写者
|
日期
|
关键词
|
郑昀 @ultrapower
|
2005-7-19
|
ASP.NET
Log4net sqlserver
|
数据库日志表的准备
在数据库中准备一个这样的表, mail_web_log :
生成脚本:
|
CREATE TABLE [dbo].[mail_web_log] (
[nId] [int] IDENTITY (1, 1) NOT NULL ,
[dtDate] [datetime] NOT NULL ,
[sThread] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[sLevel] [varchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[sLogger] [varchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[sMessage] [varchar] (2000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[sException] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[mail_web_log] WITH NOCHECK ADD
CONSTRAINT [PK_mail_web_log] PRIMARY KEY CLUSTERED
(
[nId]
) ON [PRIMARY]
GO
|
其中, sLevel 字段代表日志的级别; sLogger 字段代表日志是由哪一个类或者文件产生的,如
“ iNotes.Default.Page_Load(c:\mail\mailsource\default.aspx.cs:269) ”; sMessage 字段代表日志的内容。
Web.config
中
Log4net
的配置
注意其中“ ADONetAppender ”节点的写法,以及各个字段的打印方法。
一般来说,我们对每一个日志字段定义一个“ < Layout type ="log4net.Layout.PatternLayout"> ”节点以告诉 log4net 如何输出,在这个节点之下,我们需要配置
< conversionPattern value ="%t" />
%t 在 log4net 中专门指的是线程名 。
下面我们对“ %d %t %p %l %m %n ”一一讲解:
l %d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyyy-MM-dd HH:mm:ss} ,输出类似: 2005-7-19 17:49:27 ,刚好适合插入 SQLServer ;
l %t 产生该日志事件的线程名 ;
l %p 日志的 log_level ,如 DEBUG 、 WARN 或者 INFO ;
l %c 输出所属的类目,通常就是所在类的全名 ,如“ iNotes.Default ”;
l %m 日志的内容;
l %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如 write2database.main(write2database.java:33) ;
%n 输出一个回车换行符, Windows 平台为“ \r\n ”, Unix 平台为“ \n ”
对于 web 站点的 web.config 文件,需要如下配置,这部分是参考了 cgq214 的 Blog 讲到的写法,同时根据实际效果作了点修正:
配置:
|
< log4net >
…
< appender name ="ADONetAppender" type ="log4net.Appender.ADONetAppender">
< bufferSize value ="10" />
< connectionType value ="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
< connectionString value ="server=192.168.1.112;database=domino;uid=sa;pwd=;timeout=300;" />
< commandText value ="INSERT INTO mail_web_log ([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 ="50" />
< 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 ="200" />
< layout type ="log4net.Layout.PatternLayout">
< conversionPattern value ="%logger" />
</ layout >
</ parameter >
< parameter >
< parameterName value ="@message" />
< dbType value ="String" />
< size value ="2000" />
< layout type ="log4net.Layout.PatternLayout">
< conversionPattern value ="%m" />
</ layout >
</ parameter >
< parameter >
< parameterName value ="@exception" />
< dbType value ="String" />
< size value ="2000" />
< 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"/>
</ 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 ="RollingLogFileAppender"/>
< appender-ref ref ="ADONetAppender" />
</ logger >
</ log4net >
|
编写者
|
日期
|
关键词
|
郑昀 @ultrapower
|
2005-7-19
|
Wap ASP.NET
Log4net sqlserver
|
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=429290