log4j 格式化mysql sql语句_log4j+JDBC+mySQL 将对象写入数据库

一、写前唠叨

最近写了一个关于将对象通过log4j的形式保存到数据库的例子,因对这个log4j正在入门,所以做之前查过很多资料,不过网上的信息比较简单,如下:

1.所有信息几乎全部在配置文件中进行获取,如:数据库相关的连接、用户名、密码、sql语句;日志相关的appender、输出、格式化、参数;

2.写到数据库中的仅是一个字符串而不是一个对象,如:将一个对象本身以及它的各个数据作为一条记录存到数据库

3.代码的灵活性较低,如:只能存比较简单的数据类型,如保存一个对象及属性的话,就不太容易做了。

当然,网上的这些资料当然是为了最基础的入门而做的,因此简单了些,但也不乏比较深奥的资料,比如穿件连接池,考虑缓存等等。。

二、我的做法

1.通过继承JDBCAppender实现日志的写入的

2.通过JDBC连接数据库(也可通过HIBERNATE)

3.数据库和log4j的基本信息配置到properties中,但数据库可以自由选择多种数据库(在配置文件中配置即可)

4.将对象的属性存到库中

三、项目例子

1.项目结构图:见附件,项目结构图.png

2. 数据库:MYSQL  库名:LOG4J  表名:LogMessage/StudentMessage

表结构请看附件:LogMessage.png/StudentMessage.png

3.代码及说明

log4j.properties

:分别输出指定为:控制台、文件(log.log)、数据库

log4j.rootLogger=INFO,appender1,appender2,DATABASE

# console

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

log4j.appender.appender1.layout=org.apache.log4j.PatternLayout

log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n

# file

log4j.appender.appender2=org.apache.log4j.FileAppender

log4j.appender.appender2.File=log.log

log4j.appender.appender2.layout=org.apache.log4j.PatternLayout

log4j.appender.appender2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n

#mysql dbappender test

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/LOG4J

log4j.appender.DATABASE.username=root

log4j.appender.DATABASE.password=root

log4j.appender.DATABASE=control.DbAppender

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n %L

Conorl包——DbAppender.java

:日志提交中转站,提取日志信息,处理后进行数据库操作插入对应的表中

package control;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Hashtable;

import java.util.Iterator;

import java.util.Map;

import org.apache.log4j.jdbc.JDBCAppender;

import org.apache.log4j.spi.ErrorCode;

import org.apache.log4j.spi.LoggingEvent;

import bean.HashMapping;

import bean.Students;

import bean.UserBean;

import dao.JdbcUtils;

import dao.StudentsUtil;

import dao.UserUtil;

public class DbAppender extends JDBCAppender {

protected void closeConnection(Connection con) {

// TODO Auto-generated method stub

// super.closeConnection(con);

JdbcUtils.close(con);

}

@Override

protected void execute(String sql) throws SQLException {

// TODO Auto-generated method stub

// super.execute(arg0);

int flag = 0;

int end = sql.lastIndexOf(")");

String sqls = sql.substring(0, end + 1);

String beanname = sql.substring(end + 1);

if (beanname.equals("UserBean")) {

flag = UserUtil.insertUser(sqls);

} else if (beanname.equals("Students")) {

flag = StudentsUtil.insertStudent(sqls);

}

System.out.println(flag == 0 ? "insert fail!" : "insert successful!");

}

@Override

protected

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值