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

简介:

[Java]log4jSQL 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补丁。

下面是对运行log4jMS SQL Server 2000 SP3日志的计算机的要求:

  •   SQL Server 2000 Driver for JDBC Service Pack 3您可以从以下位置下载并安装适应于SQLServer SP3jdbc版本:
    浏览

http://www.microsoft.com/downloads/details.aspx?familyid=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en

如果只是log4jsql 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

如果是做基于Tomcatweb应用,请放在tomcatcommon\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,如DEBUGWARN或者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', '')

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1358 152
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
977 156
|
8月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
675 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
7月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
368 6
|
8月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
8月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
546 8
|
9月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
1170 8
|
9月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
395 5
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
579 9