把重要的业务日志异步批量写入数据库 LOG4J

Log4j 中阶应用 
1. 把重要的业务日志异步批量写入数据库 
      配置文件示例: 

log4j.logger.business=INFO,db 
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.db.BufferSize=10 
log4j.appender.db.URL=jdbc:hsqldb:res:/hsqldb/bookstore 
log4j.appender.db.driver=org.hsqldb.jdbcDriver 
log4j.appender.db.user=sa 
log4j.appender.db.password= 
log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m') 
log4j.appender.db.layout=org.apache.log4j.PatternLayout       log4j提供了简单灵活且不影响性能的机制, 将重要业务日志写入数据库,方便日后的查询: 

       1.  建立一个任意命名的日志记录表,在log4j.properties里设置连接参数,根据刚才建的表名列名,编写插入的语句。 

       2.  BufferSize=10 这样的参数可以让日志异步批量写入,不会影响系统性能。 

       3.  业务日志log最好不要用原来的package结构,而是在项目里协调一个独立的名字,如business。 

Log buzzLog = LogFactory.getLog("business");       4. 以上功能的演示代码在bookstore example 的OrderManager.java,测试代码在bookstore example的DBLogTest.java。 

2.Spring 对log4j的几个增强 
个人建议都不要使用。 

1. 定时刷新log4j properties文件,无须重启服务器Apply 新的log4j设置。 

    虽然这是个J2EE Best Practice,但在Spring的JavaDoc里注明了不推荐用于生产环境,因为服务器重启的时候,那条watch thread 不会关闭。 

2.将log4j.properties 文件放在WEB-INF/log4j.properties。 

   这种增强看不出有什么好处,而且如果放WEB-INF,测试的时候就不能输出log4j信息了,除非像Appfuse那样把WEB-INF也设为class path,不过这种设法只适用于Ant脚本的情况。 

3. 通过设定{web.root} 这样的系统变量,将log文件放到项目的WEB-INF目录中 

log4j.appender.logfile.File=${bookstore.root}/WEB-INF/logs /bookstore.log这样做的好处是路径比较稳定,但如果是war式的部署,每次重新部署的时候就会把原来的log文件全部删掉,遇上jboss 这种不解压war包的应用服务器就更会出错,所以把log文件放WEB-INF/logs不是一个好的选择。 


     其实logfile路径的规则是,如果不是绝对路径,就以应用运行的目录作为相对路径的根目录。 

     所以我平时这样定义,一般就指向tomcat 和很多应用服务器的logs目录: 

log4j.appender.logfile.File=../logs/bookstore.log这样的缺点是,假设你把Tomcat /bin目录添加到了PATH变量的值中去,并喜欢从Windows开始菜单的运行框里输入"startup.bat"启动Tomcat,这时Log4j 的日志就会被放到C:\Documents And Settings\logs目录中去。 

3. 忽略某些类库框架的不必要的信息 
       控制第三方框架类库的logging level,可以避免满屏都是不重要的info,把真正重要的信息掩盖了。 

# Changing the log level to DEBUG when debug 
log4j.logger.org.springframework=WARN 
# Changing the log level to DEBUG will display SQL Hibernate generated 
log4j.logger.org.hibernate=WARN 
log4j.logger.org.hibernate.SQL=ERROR
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值