log4j进mysql_Log4j 从写JDBCAppender 写入数据库

package com.yss.log4j;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.Date;

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.jdbc.JDBCAppender;

import org.apache.log4j.spi.LoggingEvent;

/**

* 利用log4j.jar将日志写人到数据库中

*

* @author qinglong

*

*/

public class JdbcAppendTest {

private Logger logger;

private JDBCAppender jdbcAppender;

/***********************************************************************************************

* 自己定义的日志保存类

**********************************************************************************************/

class WdzJDBCAppender extends JDBCAppender {

private LoggingEvent e;

/**

* 可以修改这个方法,实现PreparedStatement,Connection得重用

*

* 第三进入

*/

protected void execute(String sql) throws SQLException {

Connection con = null;

PreparedStatement stmt = null;

try {

con = getConnection();

stmt = con.prepareStatement(this.getSql());

stmt.setString(1, e.getLoggerName());// LogName

stmt.setString(2, e.getLevel().toString());// LogLevel

stmt.setString(3, (String) e.getMessage());// MSG

System.out.println(e.getLoggerName() + " ," + e.getNDC() + ", "

+ e.getRenderedMessage() + " ," + e.getThreadName()

+ " " + new Date(e.getStartTime()) + ", " + e.getClass() + ", "

+ e.getLocationInformation().getClassName() + " ,"+e.getMessage()+" ,"+e.getThrowableStrRep());

stmt.execute();

} catch (SQLException e) {

if (stmt != null)

stmt.close();

throw e;

}

stmt.close();

closeConnection(con);

}

/*******************************************************************************************

* *保存日志事件   第二进入

******************************************************************************************/

protected String getLogStatement(LoggingEvent event) {

e = event;

System.out.println("getLogStatement方法");

return getLayout().format(event);

}

}

//第一步进入  1

public JdbcAppendTest() {

logger = Logger.getLogger(JdbcAppendTest.class.getName());

// 测试,使用jdbc来保存日志信息

testJDBCAppender();

}

/***********************************************************************************************

* 写信息到日志中去

**********************************************************************************************/

private void writeLogInfo() {

logger.addAppender(jdbcAppender);

logger.setLevel(Level.ALL);

logger.debug("aaa   debug   info");

// logger.debug("aaa debug info.aaa");

logger.info("bbb info");

System.out.println("writeLogInfo方法");

logger.warn("warn info");

logger.error("error info");

logger.fatal("fatal info");

}

private void testJDBCAppender() {

jdbcAppender = new WdzJDBCAppender();

// 下面的参数可以自己修改满足自己的要求

// 设置 日志数据库保存使用的参数,可以采用配置文件的方式来加载信息

jdbcAppender.setDriver("com.mysql.jdbc.Driver");

jdbcAppender.setURL("jdbc:mysql://localhost:3306/test");

jdbcAppender.setUser("root");

jdbcAppender.setPassword("root");

jdbcAppender

.setSql("insert into log(loggername,level,message) values (?,?,?)");

//数据库中的字段 loggername、level、message

// 测试使用数据库保存日志信息

writeLogInfo();

jdbcAppender.close();

}

public static void main(String[] args) {

JdbcAppendTest wdzTest11 = new JdbcAppendTest();

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-02-26 17:08

浏览 2877

评论

1 楼

qinxiaozhou

2011-02-17

getLogStatement做什么用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给您提供以下思路: 使用log4j把日志信息保存到数据库,需要行以下步骤: 1. 创建数据库表,用于存储日志信息。例如: ```sql CREATE TABLE `log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `logger` varchar(255) DEFAULT NULL, `level` varchar(50) DEFAULT NULL, `message` text, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 2. 创建Java项目,导入log4j和mysql的依赖。 3. 在log4j.properties文件中配置log4j的输出方式为JDBCAppender。例如: ```properties log4j.rootLogger=debug, db log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender log4j.appender.db.URL=jdbc:mysql://localhost:3306/test log4j.appender.db.driver=com.mysql.jdbc.Driver log4j.appender.db.user=root log4j.appender.db.password=root log4j.appender.db.sql=INSERT INTO log(logger, level, message) VALUES('%c', '%p', '%m') ``` 其中,URL、driver、user、password是连接数据库的参数,sql是插入日志信息的SQL语句。 4. 在Java代码中使用log4j输出日志信息。例如: ```java import org.apache.log4j.Logger; public class TestLog { private static final Logger logger = Logger.getLogger(TestLog.class); public static void main(String[] args) { logger.debug("debug message"); logger.info("info message"); logger.warn("warn message"); logger.error("error message"); logger.fatal("fatal message"); } } ``` 运行程序后,log4j会自动将日志信息插入到数据库表中。 以上就是使用log4j把日志信息保存到数据库的一般思路,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值