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

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 [email protected]) * @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(); 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 [email protected]) * @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(); } } //下面的参数可以自己修改满足自己的要求 //设置 日志数据库保存使用的参数,可以采用配置文件的方式来加载信息 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(); } }

你可能感兴趣的:(使用jdbc来保存log4j日志信息的一个例子)