浏览 8293 次
锁定老帖子 主题:用log4j把日志异步写入数据库中
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-15
log4j.logger.my_work=INFO,db log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender log4j.appender.db.BufferSize=10 log4j.appender.db.URL=jdbc:mysql:///test log4j.appender.db.driver=com.mysql.jdbc.Driver log4j.appender.db.user=linken log4j.appender.db.password=linken log4j.appender.db.sql=[color=red]INSERT INTO MY_LOG (RECORDE_DATE,WHICHE_CLASS,WHICH_METHOD,I_DO) VALUES('%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')[/color] log4j.appender.db.layout=org.apache.log4j.PatternLayout 一般来说BufferSize的值设置为10,利用log4j的缓存机制批量写入到数据库中,对系统没什么影响。 在方法的应用: Log myDBLog = LogFactory.getLog("my_work"); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-19
BufferSize没什么作用,JDBCAppender
只是把用户输出的log现在一个ArrayList中保存,当其数量达到了BufferSize,才启动写日志。而且JDBCAppender还是每次都生成Connection,每一个Log还是单独写入,不是批量写入。 Log4J的数据库写入方式就是一个鸡肋,如果需要提高性能,首先,自己需要实现一个连接池。而且其还不支持addBatch,赫赫,如下是log4j源代码(JDBCAppender.java) ######################## public void flushBuffer() { //Do the actual logging removes.ensureCapacity(buffer.size()); for (Iterator i = buffer.iterator(); i.hasNext();) { try { LoggingEvent logEvent = (LoggingEvent)i.next(); String sql = getLogStatement(logEvent); execute(sql); removes.add(logEvent); } catch (SQLException e) { errorHandler.error("Failed to excute sql", e, ErrorCode.FLUSH_FAILURE); } } // remove from the buffer any events that were reported buffer.removeAll(removes); // clear the buffer of reported events removes.clear(); } ########################### protected void execute(String sql) throws SQLException { Connection con = null; Statement stmt = null; try { con = getConnection(); stmt = con.createStatement(); stmt.executeUpdate(sql); } catch (SQLException e) { if (stmt != null) stmt.close(); throw e; } stmt.close(); closeConnection(con); //System.out.println("Execute: " + sql); } |
|
返回顶楼 | |