使用拦截器实现审计日志

LogEntityInterceptor .java

代码:

/**
 *
 */
package com.b510.examplex;

import java.io.Serializable;

import org.apache.log4j.Logger;
import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;

/**
 *
 * @author XHW
 *
 * @date 2011-7-15
 *
 */
public class LogEntityInterceptor extends EmptyInterceptor {

 private static final long serialVersionUID = -3556584943170985808L;

 private final Logger logger = Logger.getLogger(LogEntityInterceptor.class);

 public void onDelete(Object entity, Serializable id, Object[] state,
   String[] propertyNames, Type[] types) {
  logger.info("删除数据");
 }

 public boolean onFlushDirty(Object entity, Serializable id,
   Object[] currentState, Object[] preState, String[] propertyNames,
   Type[] types) {
  logger.info("修改数据");
  return false;
 }

 public boolean onSave(Object entity, Serializable id, Object[] state,
   String[] propertyNames, Type[] types) {
  logger.info("保存数据");
  return false;
 }

}

log4j.propertices

代码:

log4j.logger.com.b510.examplex=info,appender1
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender1.File=logfile.txt

HibernateTest.java

代码:

/**
 *
 */
package com.b510.examplex;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 *
 * @author XHW
 *
 * @date 2011-7-15
 *
 */
public class HibernateTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  new HibernateTest().testInterceptor();
 }

 public void testInterceptor(){
  LogEntityInterceptor interceptor=new LogEntityInterceptor();
  Configuration config=new Configuration();
  config.setInterceptor(interceptor);
  config.configure();
  
  SessionFactory sf=config.buildSessionFactory();
  Session session=sf.openSession();
  
  Guestbook gb=new Guestbook();
  gb.setName("HOngten");
  gb.setContent("content: test interceptor");
  gb.setCreatedTime(new java.util.Date());
  gb.setEmail("hongtenzone@foxmail.com");
  gb.setPhone("123456");
  gb.setTitle("title:hello world");
  
  session.beginTransaction();
  session.save(gb);
  session.getTransaction().commit();
  
  session=sf.openSession();
  gb.setName("hanyuan");
  session.beginTransaction();
  session.update(gb);
  session.getTransaction().commit();
  
  
  session=sf.openSession();
  session.beginTransaction();
  session.delete(gb);
  session.getTransaction().commit();
 }
}

运行效果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
    select
        max(id)
    from
        guestbook
Hibernate:
    insert
    into
        users.guestbook
        (version, name, email, phone, title, content, created_time, id)
    values
        (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
    update
        users.guestbook
    set
        version=?,
        name=?,
        email=?,
        phone=?,
        title=?,
        content=?,
        created_time=?
    where
        id=?
        and version=?
Hibernate:
    delete
    from
        users.guestbook
    where
        id=?
        and version=?

并且在logfile.txt文件中有如下记录:


[main] INFO com.b510.examplex.LogEntityInterceptor - 保存数据
[main] INFO com.b510.examplex.LogEntityInterceptor - 修改数据
[main] INFO com.b510.examplex.LogEntityInterceptor - 删除数据

posted @ 2011-07-16 20:01  Hongten  阅读(950)  评论(0编辑  收藏  举报
Fork me on GitHub