Your Address

赞助商

MOST RECENT NEWS - WE MOMENTARILY RENEW

27
我们不管开发什么系统,通常情况下,都要求有日志,我现在写了个,希望大家提意见:


package com.util.log;

import java.util.Vector;
import java.sql.*;
import com.database.ConnectionManager;

/**
*
* <p>Title:日志处理类 </p>
* <p>Description: 将日志信息写入到数据库</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: 自由鸟</p>
* @author XXX Programer
* @version 1.0
*/

public class LogUtil {
   /**
    * 用于缓存系统日志。当这个Vector对象的大小达到一定的值时,系统把这个缓存里的
    * 数据一次性写入数据库。这个集合对象里每个元素都是一个LogBean对象
    */
   private static Vector logCache = new Vector();

   /**
    * 缓存容量
    * 当缓存里面的数据条数(即logCache对象的大小)达到这个值时,系统把缓存里的数据
    * 写入数据库
    */
   private static final int CACHE_SIZE = 20;   //XX条记录写入一次


   /**
    * 把数据集里的数据写入到数据库
    * @param   datas    数据集合。里面每个元素都是一条数据(LogBean对象)
    */
   private static void writeToDB(Vector datas){
     Connection conn = null;
     PreparedStatement pstmt = null;

     try{
       conn = ConnectionManager.getConnection();
       String sql = "insert into lmzwap.WAP_MANAGE_LOG (USER_NAME, LOG_TIME, CLIENT_IP, OPERATE_TYPE, OPERATE_DESC) "
           +" values(?,NOW(),?,?,?)";
       pstmt = conn.prepareStatement(sql);
       LogBean logBean;

       //System.out.println("---------------writeToDB,datas.size(): "+datas.size());
       for(int i=0;i<datas.size();i++){
         logBean = (LogBean)datas.get(i);
           pstmt.setString(1,logBean.user_name);
           pstmt.setString(2,logBean.client_ip);
           pstmt.setString(3,String.valueOf(logBean.operateTypeID));
           pstmt.setString(4,logBean.operateTypeDesc);
           pstmt.addBatch();
       }//end for i
       pstmt.executeBatch();   //执行批处理
     }catch(Exception e){
       System.out.println("===============批处理写入日志失败,e: "+e);
     }finally{
       if(pstmt!=null)
         try{
           pstmt.close();
         }catch(Exception e1){}

       if(conn!=null)
         try{
           conn.close();
         }catch(Exception e1){}
     }
   }


   /**
    * 把系统日志缓存里的数据写入数据库,不论缓存里有多少条记录。这个方法一般用在
    * 用户从系统退出时时,把缓存里的数据写入数据库,而不管缓存里的数据条数是否达到
    * 缓存容量
    */
   public static void writeToDB(){
     Vector copied = null;

     synchronized(logCache){
         //从缓存取得数据:
         copied = new Vector(logCache.size());
         for(int i=0;i<logCache.size();i++){
           copied.addElement(logCache.get(i));
         }
         logCache.clear();   //清除缓存数据
     }//end synchronized

     writeToDB(copied);

   }


   /**
    * 记录系统日志。调用这个方法只是把日志内容写进缓存,并不一定立即写入数据库;
    * 当缓存里的日志数量达到一定程度时,再一次性写入数据库
    * @param   request    客户端发过来的request请求,里面包含了客户端端IP的信息,
    *                     通过这个请求可得到session,在session里可得到操作员工ID,
    *                     操作员工姓名等资料
    * @param   operateTypeID:   操作类型ID
    * @param   operateTypeDesc:   操作类型描述
    * @param   operateDetail:     操作的具体内容的描述
    */
   public static void writeLog(String user_name,String client_ip,
          char operateTypeID,String operateTypeDesc) {
     try{
       //Timestamp time = new Timestamp(System.currentTimeMillis()); //操作时间

       LogBean bean = new LogBean(user_name,client_ip,operateTypeID,operateTypeDesc);

       synchronized(logCache){
         logCache.addElement(bean);   //向缓存加入数据

         //如果缓存里的数据达到了缓存容量时,向数据库写入数据:
         if(logCache.size()>=CACHE_SIZE){
           //从缓存取得数据:
           Vector copied = new Vector(logCache.size());
           for(int i=0;i<logCache.size();i++){
             copied.addElement(logCache.get(i));
           }
           logCache.clear();   //清除缓存数据
           writeToDB(copied);
         }
       }//end synchronized

     }catch(Exception e){
       System.out.println("LogUtil,e: "+e);
     }
   }

   /**
    * <pre>
    * 类名: LogBean
    * 描述: 用来缓存日志数据的类。一个对象代表一条日志记录
    * </pre>
    */
   private static class LogBean{
     String user_name;
     String client_ip;
     char operateTypeID;
     String operateTypeDesc;

     public LogBean(String user_name,String client_ip,
          char operateTypeID,String operateTypeDesc){
       this.user_name = user_name;
       this.client_ip = client_ip;
       this.operateTypeID = operateTypeID;
       this.operateTypeDesc = operateTypeDesc;
     }//
   }
 }

作者:博爱老头@博爱老头的草屋
地址:http://www.icnote.com/post/13/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

1 条评论 to “java日志操作”

sedd   2008/11/04 07:53
看看文章,这感觉好爽.
informal wedding dresses and wedding dresses
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称  [注册]
密码  [游客无需密码]
网址
电邮
               

 

©2007-2012 IcNote.COM Theme by Youth work room