现在的位置: 首页 > 综合 > 正文

定义你自己的Logj4 输出,比如 数据库连接池 database connect pool

2013年04月15日 ⁄ 综合 ⁄ 共 2420字 ⁄ 字号 评论关闭

1.首先需要继承实现一个Appender类,log4j提供了很多Appender,选择自己适合的继承,或者直接继承最根的抽象类

 package org.util.base.pub;

import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.PatternLayout;

public class Log4jDbConnectPoolAppender extends
  org.apache.log4j.AppenderSkeleton {
 private String logDate;
 private String logLevel;
 private String logValue;

 
 public void append(LoggingEvent event){
  PatternLayout layout = new PatternLayout(logDate);
  String logDate = layout.format(event);
  layout.setConversionPattern(this.logLevel);
  String logLevel = layout.format(event);

  layout.setConversionPattern(this.logValue);
  String logValue = layout.format(event);
  System.out.println("logDate="+ logDate + "logLevel=" + logLevel +";logValue=" + logValue );
  saveLog(logDate,logLevel,logValue);
  
 }
 private void saveLog(String ldate,String level,String value){
  //自己写在哪里都可以,可以写入数据库,可以写入文件,随便你怎么写
 }
 
 @Override
 public void close() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public boolean requiresLayout() {
  // TODO Auto-generated method stub
  return false;
 }
 
 public String getLogDate() {
  return logDate;
 }
 public void setLogDate(String logDate) {
  this.logDate = logDate;
 }
 public String getLogLevel() {
  return logLevel;
 }
 public void setLogLevel(String logLevel) {
  this.logLevel = logLevel;
 }
 public String getLogValue() {
  return logValue;
 }
 public void setLogValue(String logValue) {
  this.logValue = logValue;
 }

}

 

2.在log4j.properties文件中增加配置

 #定义数据库 
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@192.168.0.9:1521:orcl 
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user=system
log4j.appender.DATABASE.password=manager
log4j.appender.DATABASE.sql=INSERT INTO u_syslog (log_date,log_level,value) VALUES (to_date('%d{yyyy-MM-dd hh:mm:ss}','yyyy-mm-dd hh24:mi:ss'),'%-5p','[%F:%L]-%m%n') 
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern=%d %-5p (%F:%L) - %m%n  

#自定义的日志处理程序,是spring+hibernat 方式入库,可以配置为数据库连接池
log4j.appender.my=com.util.base.pub.Log4jDbConnectPoolAppender
log4j.appender.my.logDate=%d{yyyy-MM-dd hh:mm:ss}
log4j.appender.my.logLevel=%-5p
log4j.appender.my.logValue=[%F:%L]-%m%n
log4j.appender.my.layout=org.apache.log4j.PatternLayout 
log4j.appender.my.layout.ConversionPattern=%d %-5p (%F:%L) - %m%n 

 

别忘记在最上面增加你的输出定义

# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN,stdout,logfile,my

ok,现在可以测试一下了...

 

通过上面的自定义,你可以把日志写在你想要的任何地方,通过任何方式.比如 数据库连接池 database connect pool

抱歉!评论已关闭.