`
neptune
  • 浏览: 357110 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

把重要的业务日志异步批量写入数据库 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
分享到:
评论
1 楼 87029274 2014-10-23  
JDBCAppender 批量存入数据库,源代码写的就是个锤子,flushbuffer()方法就是遍历集合,对每条记录打开一个connection,根本就不是batch操作,如果不重写,还不如不用log4j

相关推荐

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    log4j logback commong logging jdk logger 测试框架 测试框架 junit easymock testng mockito bug管理 禅道 jira 开发工具 编程工具 eclipse myeclipse idea vi VS webstorm sublime text ...

    C#程序开发范例宝典(第2版).part13

    实例107 使用EventLog组件向本机现有日志中添加条目 155 3.4 FileSystemWatcher组件 156 实例108 使用FileSystemWatcher组件监视系统日志文件是否被更改 157 3.5 HelpProvider组件 158 实例109 使用HelpProvider...

    C#程序开发范例宝典(第2版).part08

    实例107 使用EventLog组件向本机现有日志中添加条目 155 3.4 FileSystemWatcher组件 156 实例108 使用FileSystemWatcher组件监视系统日志文件是否被更改 157 3.5 HelpProvider组件 158 实例109 使用HelpProvider...

    C#.net_经典编程例子400个

    156 3.10 DirectoryEntry组件 157 实例109 使用DirectoryEntry组件建立虚拟目录 158 第4章 图形技术 161 4.1 绘制图形 162 实例110 基本图形绘制 162 实例111 在图片中写入文字 163...

    C#程序开发范例宝典(第2版).part02

    实例107 使用EventLog组件向本机现有日志中添加条目 155 3.4 FileSystemWatcher组件 156 实例108 使用FileSystemWatcher组件监视系统日志文件是否被更改 157 3.5 HelpProvider组件 158 实例109 使用HelpProvider...

    C#程序开发范例宝典(第2版).part12

    实例107 使用EventLog组件向本机现有日志中添加条目 155 3.4 FileSystemWatcher组件 156 实例108 使用FileSystemWatcher组件监视系统日志文件是否被更改 157 3.5 HelpProvider组件 158 实例109 使用HelpProvider...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例021 使用流程控制语句报销业务花销 26 2.3 关键字的使用 27 实例022 使用checked关键字处理溢出错误 27 实例023 使用typeof关键字获取类的内部结构 28 实例024 使用using关键字有效回收资源 29 实例025 使用is...

Global site tag (gtag.js) - Google Analytics