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>

浙公网安备 33010602011771号