zoukankan      html  css  js  c++  java
  • 扩展Log4j支持JNDI数据源

    log4j.properties配置文件:

    log4j.rootLogger=INFO,db
    
    #使用log4j扩展支持JNDI数据源
    log4j.appender.db=com.qdgswx.log4j.ds.JndiDSAppender
    log4j.appender.db.jndiName=wstjndi
    log4j.appender.db.BufferSize=1
    log4j.appender.db.sql=insert into wx_log (openid,nsrsbh,logtype,classname,methodname,oprtime,loglevel,content) values ('%X{openid}','%X{nsrsbh}','%X{logtype}','%C','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%m')  
    log4j.appender.db.layout=org.apache.log4j.PatternLayout

    扩展类JndiDSAppender.java

    public class JndiDSAppender extends JDBCAppender {
    
        protected DataSource ds = null;
        protected String jndiName;
    
        public void setJndiName(String jndiName) {
            this.jndiName = jndiName;
        }
        
        protected synchronized void init() {
            if (ds != null) {
                return;
            }
            try {
                InitialContext context = new InitialContext();
                ds = (DataSource) context.lookup(jndiName);
            } catch (NamingException e) {
                this.errorHandler.error(e.getMessage());
            }
        }
        
         @Override  
        protected Connection getConnection() throws SQLException {  
            while(ds==null){
                init();
            }
            
            Connection conn = ds.getConnection();
            conn.setAutoCommit(true);
            
            return conn;
        }
        
        @Override  
        protected void closeConnection(Connection conn) {  
            try {  
                if(conn!=null&&!conn.isClosed()) {
                    conn.close();  
                } 
            } catch (SQLException e) {  
                this.errorHandler.error(e.getMessage());  
            }  
        }  
    }
  • 相关阅读:
    linux 计划任务
    linux 进程管理
    PHP中global与$GLOBALS['']的区别
    php预定义变量
    linux 强制终止进程命令
    mysql取某表中数据的随机的方法
    mysql 连接 选库 查询
    Python 的异步 IO:Asyncio 简介
    并发和并行的区别
    asyncio模块中的Future和Task
  • 原文地址:https://www.cnblogs.com/yshyee/p/4391646.html
Copyright © 2011-2022 走看看