log4j日志保存数据库

 1、不使用数据源

<appender name="DB_INFO" class="org.apache.log4j.jdbc.JDBCAppender">  
        <param name="Threshold" value="INFO"/>      
        <param name="BufferSize" value="1"/>   
         <param name="URL" value="jdbc:oracle:thin:@192.168.100.231:1522:mpptest"/>  
        <param name="driver" value="oracle.jdbc.driver.OracleDriver"/>  
        <param name="user" value="gmcc"/>  
        <param name="password" value="skywin"/>  
        <param name="sql" value="INSERT INTO RE_GLOBAL_LOG(currtime,currthread,currlevel,currcode,currmsg)    
VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')"/>

 2、使用数据源jndi

扩展JDBCAppender

package com.trunkbow.ecode.log;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


import org.apache.log4j.jdbc.JDBCAppender;
/**
 * log4j基于jndi数据源的Appender。
 * @author wangjintao
 */
public class WebDSAppender extends JDBCAppender{
	/**
	 * jndi的标示
	 */
	private String jndi;
	/**
	 * 获取jndi查找标示
	 * @return
	 */
	public String getJndi() {
		return jndi;
	}
	private DataSource ds;

	/**
	 * 设定jndi查找标示
	 * @param jndi
	 */
	public void setJndi(String jndi) {
		this.jndi = jndi;
	}

	/**
	 * 返回数据库连接,如果能找到jndi数据源就返回从jndi数据源里获得的连接,否则直接返回连接
	 */
	@Override
	protected Connection getConnection() throws SQLException {
			if(null==ds){
				Context initContext;
				try {
					initContext = new InitialContext();
					ds=(DataSource) initContext.lookup(jndi);
				} catch (NamingException e) {
				}
			}
			if (null!=ds) {
				Connection conn=ds.getConnection();
				if (null!=conn) {
					return conn;
				} 
			}
			return super.getConnection();
		
	}
	/**
	 * 关闭连接,如果不实现数据库连接就不释放。
	 */
	@Override
	protected void closeConnection(Connection con) {
		try {
			if(null!=ds&&con!=null&&!con.isClosed()){
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

}

 配置log4j

<appender name="operation" class="com.trunkbow.ecode.log.WebDSAppender">
		<param name="jndi" value="java:comp/env/jdbc/ecode"/>
		<param name="driver" value="oracle.jdbc.OracleDriver"/>
		<param name="URL" value="jdbc:oracle:thin:@195.203.56.36:1521:orcl"/>
		<param name="user" value="kcgl"/>
		<param name="password" value="kcgl"/>
		<param name="sql" value="INSERT INTO BASE_LOG_OPERATION(DBID,SESSION_ID,USER_ID,USER_NAME,ACCOUNT,DIRECT_IP,REAL_IP,CREATE_TIME,"LEVEL",CLASS_LOCATION,METHOD_LOCATION,LINE_LOCATION,CONTENT)VALUES(BASE_LOG_OPERATION_DBID_SEQ.NEXTVAL,'%X{sessionId}','%X{userId}','%X{userName}','%X{account}','%X{directIp}','%X{realIp}',TO_DATE('%d{yyyy-MM-dd HH:mm:ss}','YYYY-MM-DD HH24:MI:SS'),'%p','%c','%M','%L','%m')"/>
	</appender>

 

posted @ 2016-06-29 13:56  W&L  阅读(522)  评论(0编辑  收藏  举报