读书人

日记框架(二)-log4j 扩展 JdbcAppen

发布时间: 2012-09-27 11:11:17 作者: rapoo

日志框架(二)------log4j 扩展 JdbcAppender输出器

?

?

log4j中提供了将日志记录到数据库中的输出器: org.apache.log4j.jdbc.JDBCAppender。通过以下配置即可生效

?

?

JndiDataSourceAppender类定义:

?

?

?

配置文件:

?

## -----自定义 logger2 prepareSqlDbLog -------------##log4j.logger.prepareSqlDbLog=ERROR,prepareStatementDbLogAppenderlog4j.appender.prepareStatementDbLogAppender=cn.log4j.datasource.PrepareStatementJdbcAppenderlog4j.appender.prepareStatementDbLogAppender.URL=jdbc:mysql://localhost:3306/testlog4j.appender.prepareStatementDbLogAppender.driver=com.mysql.jdbc.Driverlog4j.appender.prepareStatementDbLogAppender.user=rootlog4j.appender.prepareStatementDbLogAppender.password=xiaodilog4j.appender.prepareStatementDbLogAppender.sql=insert into t_log4j_info(priority,message,catalog,time) values(?,?,?,?)log4j.appender.prepareStatementDbLogAppender.sqlParams=%p%m%c%d{yyyy-MM-dd HH:mm:ss}log4j.appender.prepareStatementDbLogAppender.bufferSize=10##--------------db  ------------------##log4j.appender.db=cn.log4j.datasource.JndiDataSourceAppenderlog4j.appender.db.jndiName=java:comp/env/jdbc/mysql_loglog4j.appender.db.sql=insert into t_log4j_info(priority,message,catalog,time) values(?,?,?,?)log4j.appender.db.sqlParams=%p%m%c%d{yyyy-MM-dd HH:mm:ss}log4j.appender.db.bufferSize=5
?

?

?

另外,通过分析源码了解下log4j的JdbcAppender是如何保证线程安全的:

?

JdbcAppender继承AppenderSkeleton抽象基类,AppenderSkeleton通过synchronized的doAppend方法调用抽象的append方法,所以子类JdbcAppender实现的append方法也会是线程顺序进入,

从而保证了append中调用的日志缓冲区(ArrayList)及数据库连接对象没有线程并发访问问题。

同时,在log4j运行期间,同一名称的logger存在唯一实例;声明的同一名称的appender也存在唯一实例。?

?

?

?

补充:发现一个更强大的 JdbcAppender :http://www.mannhaupt.com/danko/projects/index.html??

?

?

读书人网 >其他数据库

热点推荐