[Java]log4j写SQL Server数据库日志的统一写法

系统 1801 0

[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 版本:
    浏览

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', '')

 

编写者

日期

关键词

郑昀 @ultrapower

2005-7-19

Java log4j sqlserver

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=429289


[Java]log4j写SQL Server数据库日志的统一写法


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论