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.JDBCAppender
log4j.appender.db.BufferSize=20
log4j.appender.db.URL=jdbc:hsqldb:hsql://localhost:9002/bookstore
log4j.appender.db.driver=org.hsqldb.jdbcDriver
log4j.appender.db.user=sa
log4j.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可以达到异步写入的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值