`
xiaotian_ls
  • 浏览: 304235 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多

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

 

转载 Springside http://wiki.springside.org.cn/display/springside/Log4j

分享到:
评论

相关推荐

    批量插入数据库方法

    在IT行业中,数据库操作是日常开发中的重要环节,尤其是在处理大量数据时,高效的插入方法显得尤为重要。本示例聚焦于“批量插入数据库方法”,通过C#编程语言来实现这一功能。C#是一种广泛用于Windows平台的面向...

    一个C++的类库用来将日志信息写到MySQL数据库的logs表中.tgz

    为了保证性能和可靠性,类库可能会实现批量写入或者异步写入机制。批量写入可以减少网络往返次数,提高效率;异步写入则可以在不影响主线程的情况下处理日志,保证应用程序的正常运行。 此外,为了适应不同的需求,...

    行业分类-设备装置-改进的把数据写入数据库的系统及方法.zip

    例如,可以使用消息队列(如RabbitMQ或Kafka)来缓冲数据,然后由后台进程负责将数据批量写入数据库。这种方式尤其适用于设备装置产生的持续性数据流。 再者,数据库自身的优化也是关键。例如,合理设计数据库架构...

    基于ASP的极瑞批量上传系统(写入数据库) v1.0.zip

    这个“基于ASP的极瑞批量上传系统(写入数据库) v1.0.zip”文件,显然是一个使用ASP技术开发的系统,它具备批量上传功能,并且能够将上传的数据写入数据库。 批量上传系统通常涉及以下几个关键知识点: 1. **文件...

    c# 读log (txt)写入数据库

    在IT行业中,日志文件(通常为txt格式)是记录...综上所述,通过C#实现读取log(txt)文件并写入数据库的过程,涉及文件I/O、日志解析、数据库操作等多个环节。在实际应用中,还需要根据具体需求进行相应的优化和调整。

    批量读取txt文件导入数据库Demo实例

    在IT行业中,批量读取文本文件(如TXT文件)并将其数据导入到数据库是一项常见的任务,特别是在处理大量数据时。这个“批量读取txt文件导入数据库Demo实例”可能是一个示例程序,展示了如何高效地完成这项工作。下面...

    qt异步日志系统源代码

    8. **性能优化**:异步日志系统可能会包含一些性能优化策略,如批量写入、缓冲区管理等,以减少磁盘I/O操作。 9. **测试与调试**:源码可能包含了测试用例,以验证日志系统的正确性和性能。 10. **集成与应用**:...

    使用MSMQ实现异步数据库操作.pdf

    3. **批量处理**:对于需要批量处理的数据,如日志记录、批量导入等,MSMQ可以优化处理流程,减少单次数据库操作的复杂性。 【案例应用】 在汽车检测管理系统中,例如车辆检测数据的上传、营运车辆管理、维修企业...

    行业文档-设计装置-日志数据写入方法和日志系统.zip

    因此,通常会采用队列或者缓冲区的方式,先将日志数据暂存,然后由后台线程批量写入磁盘,这样可以提高系统的吞吐量。 4. **分布式日志收集**:在大规模分布式系统中,如Kafka、Fluentd和Logstash等工具用于收集...

    基于SSM的日志系统

    8. **性能考虑**:大量日志记录可能对系统性能产生影响,因此需要合理设计日志写入策略,例如异步写入、批量提交等。同时,数据库表设计也要考虑到查询效率,可能需要建立索引。 9. **安全性**:日志中可能包含敏感...

    使用队列进行日志的记录

    通过将日志添加到队列尾部,然后在一个后台线程或进程从队列头部取出并写入数据库,可以实现异步处理,提高系统的整体性能。 2. **C#中的队列实现**: 在C#中,`System.Collections.Concurrent`命名空间提供了线程...

    VC实现的日志记录类,可方便地记录日志

    6. **性能优化**:考虑到日志可能会频繁调用,需要优化写入性能,例如批量写入或异步写入。 在描述中提到了“支持多线程多日志文件同时记录”,这表明该类可能具备上述1和2的特点。而`testLogInfo`这个文件名可能是...

    日志,NLog日志扩展,大批量日志插入操作源代码

    5. **性能优化**:批量写入时,可能需要考虑数据库事务管理,以确保日志数据的一致性。此外,可以利用数据库的批量插入API(如SQL Server的`SqlBulkCopy`)来进一步提升效率。 6. **配置集成**:最后,确保你的...

    数据库备份同步软件

    异步复制允许源数据库在数据写入后立即响应,而目标数据库稍后接收并应用更改;同步复制则要求源数据库等待目标数据库确认接收并处理更改后才继续操作;批量复制则是在特定时间间隔内一次性传输大量数据。 这款名为...

    多线程写日志类

    5. **异步写入**:为了提高性能,日志类可能会使用缓冲区和异步写入策略,将日志先存入内存,然后在合适的时间批量写入磁盘。 6. **日志输出目的地**:除了文件,日志还可能输出到控制台、网络、数据库或专门的日志...

    电商异步消息系统的实践

    3. 日志处理:大量日志数据异步写入,避免阻塞主业务流程。 4. 批量操作:如批量发货、退款等操作,可以通过消息队列进行批量处理,降低数据库压力。 四、异步消息的优势 1. 提高系统性能:通过解耦,生产者和消费...

    在MVC中记录操作日志类

    为了防止日志记录影响系统性能,可以考虑异步写入日志、批量处理或者使用日志聚合服务。 10. **代码示例** 假设我们有一个名为`OperationLogger`的类,其中包含`Log`方法来记录日志。在自定义的`ActionFilter`中...

    用VS2017 c#写的日志单元.rar

    例如,批量写入和异步写入可以提高效率,减少I/O操作对程序的影响。 综上所述,"用VS2017 C#写的日志单元"是一个全面的、线程安全的日志解决方案,开发者可以利用它快速地在C#项目中集成日志记录功能,提高问题排查...

    aiologger:python和asyncio的异步日志记录

    ### 异步日志记录的重要性 在现代Web服务和分布式系统中,日志记录通常需要处理大量的并发写入操作。如果使用同步方式,当并发请求增加时,日志处理可能成为系统的瓶颈,导致整体性能下降。`aiologger`通过异步处理...

    Oracle数据库间的同步复制的技术

    RAC允许多个实例同时访问同一个数据库,当一个实例上的更改被写入共享存储时,其他实例会立即看到这些更改。 每种同步复制技术都有其独特的优点和适用场景。例如,Data Guard 适用于对数据安全性要求极高的环境,而...

Global site tag (gtag.js) - Google Analytics