SQL Server 2000 Driver for JDBC Service Pack 3
的下载
之前需要注意一点,sql server同样必须打上了sp3的补丁,然后才能与jdbc for sqlserver sp3连接。如果是"Error establishing socket"错误,很有可能是要在sql上打sp3补丁。
下面是对运行log4j写MS SQL Server 2000 SP3日志的计算机的要求:
-
SQL Server 2000 Driver for JDBC Service Pack 3
。
您可以从以下位置下载并安装适应于
SQLServer SP3
的
jdbc
版本:
浏览
http://www.microsoft.com/downloads/details.aspx?familyid=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en
如果只是
log4j
写
sql server
,我们只需要下载这个包中的
mssqlserver.tar
即可,不必安装
jdbc
:
http://www.microsoft.com/downloads/info.aspx?na=46&p=3&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f4%2f1%2fd%2f41d3e9c0-64d1-451e-947b-7a4cba273b2d%2fmssqlserver.tar
下载信息为:
l
Download files belowQuick InfoVersion: 2.2.0040
l
Date Published: 7/6/2004
l
Language: English
l
Download Size: 2883 KB*
得到
jar
包
从
mssqlserver.tar
解压缩出:
l
msbase.jar
l
msutil.jar
l
mssqlserver.jar
如果是做基于
Tomcat
的
web
应用,请放在
tomcat
的
common\lib
文件夹下。并让你的工程加入对它们的引用。
数据库日志表的准备
在数据库中准备一个这样的表,
jws_log
:
生成脚本:
|
CREATE TABLE [dbo].[jws_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].[jws_log] WITH NOCHECK ADD
CONSTRAINT [PK_jws_log] PRIMARY KEY CLUSTERED
(
[nId]
) ON [PRIMARY]
GO
|
其中,
sLevel
字段代表日志的级别;
sLogger
字段代表日志是由哪一个类或者文件产生的,如
“
iNotes.Default.Page_Load(c:\mailsource\default.aspx.cs:269)
”;
sMessage
字段代表日志的内容。
工程中
Log4J
的配置
对工程的属性文件,需要如此配置:
配置:
|
log4j.rootLogger=DEBUG,CONSOLE,DATABASE
log4j.addivity.org.apache=true
########################
# JDBC Appender
#######################
log4j.appender.DATABASE.Threshold=INFO
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.BufferSize=10
log4j.appender.DATABASE.URL=jdbc:microsoft:sqlserver://192.168.1.111:1433;DatabaseName=ultra_domino
log4j.appender.DATABASE.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
log4j.appender.DATABASE.user=sa
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO wap_mail_jws_log VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m', '')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
|
下面我们对“
%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)
;
l
%n
输出一个回车换行符,
Windows
平台为“
\r\n
”,
Unix
平台为“
\n
”
工程中调用
Log4J
工程中的写法:
代码:
|
import sun.jdbc.odbc.*;
import java.sql.*;
import org.apache.log4j.Category;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.jdbc.*;
/*
add for log4j: class Logger is the central class in the log4j package.
we can do most logging operations by Logger except configuration.
getLogger(...): retrieve a logger by name, if not then create for it.
*/
static Logger logger = Logger.getLogger
( write2database.class.getName () ) ;
/*
add for log4j: class BasicConfigurator can quickly configure the package.
print the information to console.
*/
PropertyConfigurator.configure ( "log4j2database.properties" ) ;
logger.info ( "just test" ) ;
|
运行起来,你就会看到有这样的
sql
语句被执行了:
INSERT INTO jws_log VALUES ('2005-07-19 17:48:50', 'main', 'INFO', 'write2database.main(write2database.java:33)', 'just test', '')