岁月如歌 发表于 2013-1-30 01:59:55

log4j日志处理

1.log4j与Jakarta Commons Logging基础

  请自行google,不重复。
 2.Spring对Log4j的增强

 spring对可以有如下的cream:
   1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。
  (其实,spring是把这delegate给log4j PropertyConfigurator的configureAndWatch,多开一条线程来完成的。)
2. 把log文件定在 webapp相关的路径,如/WEB-INF/logs/ 而不需要写绝对路径。
3. 可以把log4j.properties放在/WEB-INF/ ,而不是Class-Path。
具体配置见web.xml里面的相关部分,主要是靠spring的Log4jConfigListener完成.
但这些扩展对不同的容器和部署方式可能会有影响,请自行裁减。
3.默认写入操作员ID

    比如在一个ServletFilter里实现如下代码 
      Customer customer = (Customer) session.getAttribute("customer");      MDC.put("userid",customer.getLoginid());   则log4j会线程安全的把cusomer id 写入MDC的userId变量中,而userID变量的使用见下。
   springside里面实现了此filter的基类,filter子类只需实现userid String的获取即可。见BaseLog4JUserFilter.java和Log4JUserFilter.java
4. 异步写入数据库

把重要的log写入数据库,使其具备查询过滤的能力。同时为了不影响程序的运行速度,一般采用异步写入的形式。
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.db.BufferSize=20log4j.appender.db.URL=jdbc:hsqldb:hsql://localhost:9002/bookstorelog4j.appender.db.driver=org.hsqldb.jdbcDriverlog4j.appender.db.user=salog4j.appender.db.password=log4j.appender.db.sql=INSERT INTO LOG4J_LOG (LOGINID,PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%X{userId}','%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')     在数据库中建立任意的log表, 通过sql属性指定表名和列名, 而BufferSize=100可以达到异步写入的效果。
页: [1]
查看完整版本: log4j日志处理