在LOG4J中把日志写入远程数据库

LOG4J强大的功能让我爱不释手,为了不用跑到机房看日志,我打算把日志写入远程数据库,这样操作起来就方便了,同时又可以按时间、按关键词搜索,一举两得。

LOG4J提花了一个JDBCAppender的远程数据库输出方案,使用也很简单,在配置文件里写好驱动名、URL及远程数据库的登陆账号、密码,再加一个布局&SQL语句全部搞定,真当是方便极了。在我本机上测试没有问题,但欢天喜地移植到服务器上问题就来了,发现每次数据库连接特别慢,严重影响了程序的正常运行,这还得了,赶紧恢复到原来的状态,思索如何改进。

了解它的原理之后,问题的关键部分就很清楚了,JDBCAppender在向远程数据库写日志时,用的是短连接,虽然定义了一个BufferSize,但好像不起什么作用,这就相当于每次写日志都要重新建立一次数据连接,而建连接往往最耗时间的啦,能不能把我原来写的数据库连接池和LOG4J和JDBCAppender结合起来使用呢?

大的方向应该是没有问题,也搜索了一下别人实现的数据库连接池,但总觉得不是很满意,还是用自己的连接池放心。如何扩展原来的JDBCAppender、把数据库连接池传递进去,一开始没有搞明白,想了老半天,后来终于整明白了。我只需要继承原来的JDBCAppender,把getConnection()和closeConnection()两个方法重写即可,其它的都不用变,示例如下:

package  com.gftech.log4j;

import  java.sql.Connection;
import  java.sql.SQLException;
import  java.util.ArrayList;

import  org.apache.log4j.jdbc.JDBCAppender;

import  com.gftech.common.GFConn;
import  com.gftech.common.GFDB;

public   class  JDBCExtAppender  extends  JDBCAppender  {
    
protected String driver;

    
public static GFDB gfdb;

    
private ArrayList<GFConn> tempList;

    
public JDBCExtAppender() {
        
super();
        tempList 
= new ArrayList<GFConn>();
    }


    
/**
     * Override this to return the connection to a pool, or to clean up the
     * resource.
     * 
     * The default behavior holds a single connection open until the appender is
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值