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
分享到:
相关推荐
在IT行业中,日志文件(通常为txt格式)是记录...综上所述,通过C#实现读取log(txt)文件并写入数据库的过程,涉及文件I/O、日志解析、数据库操作等多个环节。在实际应用中,还需要根据具体需求进行相应的优化和调整。
3. **性能优化**:通过异步日志记录和批量写入机制,Log4j可以在不影响应用性能的前提下处理大量日志。 4. **可扩展性**:Log4j的插件架构使得用户可以轻松开发自定义Appender、Layout和Filter,以适应特定需求。 ...
同时,使用异步写入或者批量处理日志,可以提高效率。 **6. log4php 2.3.0版本更新** apache-log4php-2.3.0是log4php的一个稳定版本,它引入了对PHP 7的兼容性,修复了一些已知问题,并提供了新的功能。具体更新...
2. **日志库/框架**:大部分高级语言都提供了专门的日志库,如Java的Log4j、Python的logging模块。这些库提供了一套完整的日志API,支持不同级别的日志(如DEBUG、INFO、WARN、ERROR等),并允许自定义日志格式和...
8. **性能考虑**:大量日志记录可能对系统性能产生影响,因此需要合理设计日志写入策略,例如异步写入、批量提交等。同时,数据库表设计也要考虑到查询效率,可能需要建立索引。 9. **安全性**:日志中可能包含敏感...
1. **异步日志记录**:log4net支持异步Appender,通过配置`bufferSize`和`immediateFlush`属性,可以在不影响应用程序性能的情况下批量写入日志。 2. **日志重定向**:通过`Hierarchy.Root.Reconfigurable`属性,...
这个框架出自Apache软件基金会,是Java中的log4j的.NET版本。log4net 2.0版本引入了更多改进和新特性,使其在处理复杂日志需求时更为高效。 **1. 安装与配置** 首先,你需要在项目中引用log4net库。这可以通过NuGet...
log4Net还提供了其他高级特性,如过滤器(Filter)用于控制哪些日志信息被记录,缓存(BufferingAppenderSkeleton)用于批量写入日志,以及异步日志记录等。此外,可以通过自定义Appender和Layout扩展其功能,以...
此外,log4cpp还提供了异步日志记录,将日志写入缓冲区,批量处理,减少系统调用次数。 8. **调试和监控**:log4cpp的调试功能可以帮助开发者追踪程序中的问题,通过调整日志级别,可以轻松地在不同阶段获取所需的...
4. **异步处理**:log4net提供了异步Appender,如`log4net.Appender.BufferingAppenderSkeleton`,它会缓冲日志事件,然后在后台线程中批量写入,提高性能。 5. **日志输出**:实际的日志写入操作在各个Appender的...
通过将日志添加到队列尾部,然后在一个后台线程或进程从队列头部取出并写入数据库,可以实现异步处理,提高系统的整体性能。 2. **C#中的队列实现**: 在C#中,`System.Collections.Concurrent`命名空间提供了线程...
5. **异步处理**:在高并发环境下,为了不影响主业务流程,可以采用异步方式写入日志,避免阻塞。 6. **日志滚动**:当单个日志文件大小超过一定限制时,自动创建新的日志文件,防止单个文件过大难以管理。 7. **...
5. **性能优化**:批量写入时,可能需要考虑数据库事务管理,以确保日志数据的一致性。此外,可以利用数据库的批量插入API(如SQL Server的`SqlBulkCopy`)来进一步提升效率。 6. **配置集成**:最后,确保你的...
以一个常见的日志库如Java的Log4j或Python的logging为例,日志配置通常会涉及以下几个方面: 1. **日志级别**:日志级别决定了哪些级别的信息会被记录。DEBUG用于调试,INFO记录一般信息,WARN表示可能出现的问题,...
- **日志缓冲**:通过BufferingAppenderSkeleton,可以批量写入日志,减少磁盘I/O。 6. **在实践中应用** - **调试**:在开发阶段,使用DEBUG级别帮助定位问题。 - **生产环境**:调整日志级别,只记录ERROR和...
6. **性能优化**:考虑到日志可能会频繁调用,需要优化写入性能,例如批量写入或异步写入。 在描述中提到了“支持多线程多日志文件同时记录”,这表明该类可能具备上述1和2的特点。而`testLogInfo`这个文件名可能是...
5. **异步写入**:为了提高性能,日志类可能会使用缓冲区和异步写入策略,将日志先存入内存,然后在合适的时间批量写入磁盘。 6. **日志输出目的地**:除了文件,日志还可能输出到控制台、网络、数据库或专门的日志...
### 异步日志记录的重要性 在现代Web服务和分布式系统中,日志记录通常需要处理大量的并发写入操作。如果使用同步方式,当并发请求增加时,日志处理可能成为系统的瓶颈,导致整体性能下降。`aiologger`通过异步处理...
8. **性能优化**:考虑到日志处理可能会对应用程序性能造成影响,miniLog可能采用了优化策略,如批量写入、异步处理等方式,以减少对主线程的阻塞,保证程序的正常运行。 9. **可扩展性**:为了满足不同项目的需求...
7. **性能优化**:高效的日志类库会考虑性能问题,例如延迟写入、批量写入和异步处理,以避免日志记录对程序运行造成显著影响。 8. **可扩展性**:好的日志类库设计应该具有良好的可扩展性,允许开发者添加自定义的...