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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
116 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
5天前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
2月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
2月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
2月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
3月前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
3月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
48 2
|
4月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
44 4
|
4月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
81 11
|
2月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
410 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板