业务异步写mysql数据库_把重要的业务日志异步批量写入数据库
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
分享到:
2008-11-17 09:40
浏览 1982
评论
业务异步写mysql数据库_把重要的业务日志异步批量写入数据库相关推荐
- mysql 写不进数据库_求助,为何我的数据不能写入数据库
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为何我的数据不能写入数据库 数据库表的结构 phpMyAdmin SQL Dump -- version 4.6.4 -- https://www.php ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C# 1) insert循环插入: 2) sqldataadapter.update(dataset,tablename ...
- idea中链接mysql查询_在Idea中编写Java程序连接查询Sqlite数据库
1.使用SqliteSpy建立好数据库文件SqliteSpy运行界面 2.准备好一个空文件夹存放java工程和数据库文件,准备好数据库驱动jar包拷贝到文件夹中sqlite数据库文件和驱动 3.在Id ...
- mysql写入不了数据文件_求助,为何我的数据不能写入数据库
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为何我的数据不能写入数据库 数据库表的结构 phpMyAdmin SQL Dump -- version 4.6.4 -- https://www.php ...
- python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器
在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...
- 异步复位同步释放_简谈同步复位和异步复位
简谈同步复位和异步复位 大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊数字电路设计中的同步复位和异步复位. 谈到同步复位和异步复位,那咱们就不得不来聊一聊复位这个词了.在数字逻辑电路设计中,电路通 ...
- java流写入数据库_成为Java流大师–第4部分:数据库流
java流写入数据库 SQL一直是一种声明性语言,而Java长期以来势在必行. Java流改变了游戏规则. 通过本动手文章编写您的方式,并学习如何使用Java流对RDBMS数据库执行声明性查询,而无需 ...
- sql重命名数据库_为什么要为SQL单元测试巧妙地命名数据库对象
sql重命名数据库 This article is focussed on clever database object naming from both development and SQL un ...
- python如何使用本地数据库_使用Python在虚拟机上怎么连接本地数据库
首先保证你的虚拟机和本机网络是处于同一网段的(一个局域网内), 然后明确数据库所占用的端口, 数据库账户密码就可以链接上了! python中把一个数据库对应的表封装成类就很好操作了! mysql的话: ...
最新文章
- Kubernetes 架构(下)【转】
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
- mega_[MEGA DEAL]终极Android N开发套件(90%折扣)
- (3)websocket实现单聊和群聊
- Binary String Reconstruction CodeForces - 1352F(思维+构造)
- oracle用户密码已过期,oracle用户密码过期的处理方法
- @Resource注解使用详解
- geoserver三维_集团公司自主研发三维GIS平台产品——GeniusWorld 2.0 C版本发布
- [转载] python3.5 利用openpyxl模块来处理excel表
- poj 1753 Flip Game 高斯消元 异或方程组 求最值
- 「代码随想录」听说背包问题很难? 这篇总结篇来拯救你了
- php 仿安居客源码_python抓取安居客小区数据的程序代码
- idea配置有道词典
- 如何查看电脑所有连接过的wifi密码?
- LibreOJ - 10015 扩散
- Java多线程系列--“JUC锁”04之 公平锁(二)
- Linux software RAID 1 - root filesystem becomes read-only after a fault on one disk
- 电脑可以用的免费配音软件,语音识别,语音转文字,文字转语音。
- 使用Nordic芯片的手环OTA(android)
- Arcgis API For js 的离线部署
热门文章
- [导入]提高英语口语水平【网上资料整合】
- 今年最烂密码出炉,一秒钟就破解!你中枪了没?
- java: 未报告的异常错误java.lang.IllegalAccessException; 必须对其进行捕获或声明以便抛出
- 华为数通Hcia 1、通信基础
- 微信小程序中商品列表 不显示
- 苹果发布蓝牙耳机新固件,耳机Find My功能越发普及
- 基于微信小程序和安卓的课程考勤点名系统APP
- 个人电脑秒变服务器 简单几步,你的电脑也可以成为服务器 (内网穿透)
- tensorflow函数学习
- Centos7 Python3.6+Qt5.12.9+ PyQt5.12+Sip v5+QScintilla-2.10+Eric6