[Java]log4j 写 SQL Server 数据库日志的统一写法
编写者
|
日期
|
关键词
|
郑昀 @ultrapower
|
2005-7-19
|
Java log4j sqlserver
|
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
版本:
浏览
如果只是 log4j 写 sql server ,我们只需要下载这个包中的 mssqlserver.tar
即可,不必安装 jdbc :
下载信息为:
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', '')
编写者
|
日期
|
关键词
|
郑昀 @ultrapower
|
2005-7-19
|
Java log4j sqlserver
|
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=429289