使用jdbc来保存log4j日志信息的一个例子

wdz_wdz 2004-08-04 07:05:21
package log4jtest;

import org.apache.log4j.*;
import org.apache.log4j.jdbc.JDBCAppender;
import java.sql.*;
import org.apache.log4j.spi.*;
import org.apache.log4j.PatternLayout;


/**
* <p>Title: </p>
* <p>Description: 使用jdbc来保存log4j日志信息。
* The JDBCAppender provides for sending log events to a database. </p>
* <p>
* * 在数据库创建数据表,运行程序迁,先创建下面的数据库对象
--Create sequence
create sequence SEQ_wdzlog;
-- Create table
create table WDZLOG
(
WDZLOGID NUMBER(10) not null,
LogName VARCHAR2(255),
LogLevel VARCHAR2(20),
MSG VARCHAR2(255)
);

alter table WDZLOG
add constraint PK_WDZLOGID primary key (WDZLOGID);

* </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: netsky</p>
* @author wdz( hotmail =wdz123@hotmail.com)
* @version 1.0
*/



public class WdzJdbcLogTest1 {
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
stmt.execute();
}
catch (SQLException e) {
if (stmt != null)
stmt.close();
throw e;
}
stmt.close();
closeConnection(con);
}

/***保存日志事件
* **/
protected String getLogStatement(LoggingEvent event) {
e = event;
return getLayout().format(event);
}
}

public WdzJdbcLogTest1() {
logger = Logger.getLogger(WdzJdbcLogTest1.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");
logger.warn("warn info");
logger.error("error info");
logger.fatal("fatal info");

}
private void testJDBCAppender() {
jdbcAppender = new WdzJDBCAppender();
//下面的参数可以自己修改满足自己的要求
//设置 日志数据库保存使用的参数,可以采用配置文件的方式来加载信息
jdbcAppender.setDriver("oracle.jdbc.driver.OracleDriver");
jdbcAppender.setURL("jdbc:oracle:thin:@wdz:1521:wdzdb");
jdbcAppender.setUser("apple");
jdbcAppender.setPassword("apple");
jdbcAppender.setSql("insert into WDZLOG values (SEQ_WDZLOG.nextval,?,?,?)");
//测试使用数据库保存日志信息
writeLogInfo();
jdbcAppender.close();
}

public static void main(String[] args) {
WdzJdbcLogTest1 wdzTest11 = new WdzJdbcLogTest1();
}
}
...全文
115 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧