[Java]log4j寫SQL Server數(shù)據(jù)庫(kù)日志的統(tǒng)一寫法
編寫者
|
日期
|
關(guān)鍵詞
|
鄭昀@ultrapower
|
2005-7-19
|
Java log4j sqlserver
|
SQL Server 2000 Driver for JDBC Service Pack 3的下載
之前需要注意一點(diǎn),sql server同樣必須打上了sp3的補(bǔ)丁,然后才能與jdbc for sqlserver sp3連接。如果是"Error establishing socket"錯(cuò)誤,很有可能是要在sql上打sp3補(bǔ)丁。
下面是對(duì)運(yùn)行log4j寫MS SQL Server 2000 SP3日志的計(jì)算機(jī)的要求:
- SQL Server 2000 Driver for JDBC Service Pack 3。您可以從以下位置下載并安裝適應(yīng)于SQLServer SP3的jdbc版本:
瀏覽
http://www.microsoft.com/downloads/details.aspx?familyid=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en
如果只是log4j寫sql server,我們只需要下載這個(gè)包中的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應(yīng)用,請(qǐng)放在tomcat的common\lib文件夾下。并讓你的工程加入對(duì)它們的引用。
數(shù)據(jù)庫(kù)日志表的準(zhǔn)備
在數(shù)據(jù)庫(kù)中準(zhǔn)備一個(gè)這樣的表,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字段代表日志的級(jí)別;sLogger字段代表日志是由哪一個(gè)類或者文件產(chǎn)生的,如
“iNotes.Default.Page_Load(c:\mailsource\default.aspx.cs:269)”;sMessage字段代表日志的內(nèi)容。
工程中Log4J的配置
對(duì)工程的屬性文件,需要如此配置:
配置:
|
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
|
下面我們對(duì)“%d %t %p %l %m %n”一一講解:
l %d輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},輸出類似:2005-7-19 17:49:27,剛好適合插入SQLServer;
l %t 產(chǎn)生該日志事件的線程名;
l %p 日志的log_level,如DEBUG、WARN或者INFO;
l %c 輸出所屬的類目,通常就是所在類的全名,如“iNotes.Default”;
l %m 日志的內(nèi)容;
l %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。如write2database.main(write2database.java:33);
l %n 輸出一個(gè)回車換行符,Windows平臺(tái)為“\r\n”,Unix平臺(tái)為“\n”
工程中調(diào)用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" ) ;
|
運(yùn)行起來(lái),你就會(huì)看到有這樣的sql語(yǔ)句被執(zhí)行了:
INSERT INTO jws_log VALUES (‘2005-07-19 17:48:50‘, ‘main‘, ‘INFO‘, ‘write2database.main(write2database.java:33)‘, ‘just test‘, ‘‘)
編寫者
|
日期
|
關(guān)鍵詞
|
鄭昀@ultrapower
|
2005-7-19
|
Java log4j sqlserver
|
[Java]log4j寫SQL Server數(shù)據(jù)庫(kù)日志的統(tǒng)一寫法
編寫者
|
日期
|
關(guān)鍵詞
|
鄭昀@ultrapower
|
2005-7-19
|
Java log4j sqlserver
|
SQL Server 2000 Driver for JDBC Service Pack 3的下載
之前需要注意一點(diǎn),sql server同樣必須打上了sp3的補(bǔ)丁,然后才能與jdbc for sqlserver sp3連接。如果是"Error establishing socket"錯(cuò)誤,很有可能是要在sql上打sp3補(bǔ)丁。
下面是對(duì)運(yùn)行log4j寫MS SQL Server 2000 SP3日志的計(jì)算機(jī)的要求:
- SQL Server 2000 Driver for JDBC Service Pack 3。您可以從以下位置下載并安裝適應(yīng)于SQLServer SP3的jdbc版本:
瀏覽
http://www.microsoft.com/downloads/details.aspx?familyid=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en
如果只是log4j寫sql server,我們只需要下載這個(gè)包中的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應(yīng)用,請(qǐng)放在tomcat的common\lib文件夾下。并讓你的工程加入對(duì)它們的引用。
數(shù)據(jù)庫(kù)日志表的準(zhǔn)備
在數(shù)據(jù)庫(kù)中準(zhǔn)備一個(gè)這樣的表,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字段代表日志的級(jí)別;sLogger字段代表日志是由哪一個(gè)類或者文件產(chǎn)生的,如
“iNotes.Default.Page_Load(c:\mailsource\default.aspx.cs:269)”;sMessage字段代表日志的內(nèi)容。
工程中Log4J的配置
對(duì)工程的屬性文件,需要如此配置:
配置:
|
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
|
下面我們對(duì)“%d %t %p %l %m %n”一一講解:
l %d輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},輸出類似:2005-7-19 17:49:27,剛好適合插入SQLServer;
l %t 產(chǎn)生該日志事件的線程名;
l %p 日志的log_level,如DEBUG、WARN或者INFO;
l %c 輸出所屬的類目,通常就是所在類的全名,如“iNotes.Default”;
l %m 日志的內(nèi)容;
l %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。如write2database.main(write2database.java:33);
l %n 輸出一個(gè)回車換行符,Windows平臺(tái)為“\r\n”,Unix平臺(tái)為“\n”
工程中調(diào)用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" ) ;
|
運(yùn)行起來(lái),你就會(huì)看到有這樣的sql語(yǔ)句被執(zhí)行了:
INSERT INTO jws_log VALUES (‘2005-07-19 17:48:50‘, ‘main‘, ‘INFO‘, ‘write2database.main(write2database.java:33)‘, ‘just test‘, ‘‘)
編寫者
|
日期
|
關(guān)鍵詞
|
鄭昀@ultrapower
|
2005-7-19
|
Java log4j sqlserver
|