gong1(轻松编程) ,怎么实现啊,大侠,提点提点亚

解决方案 »

  1.   

    --------------
    //LevelDependFileAppender.javapackage org.apache.log4j;import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.io.File;
    import java.io.FileOutputStream;
    import org.apache.log4j.helpers.LogLog;public class LevelDependFileAppender extends LevelDependWriterAppender {  protected String debugFile,infoFile,warnFile,errorFile,fatalFile;
      protected File fDebug,fInfo,fWarn,fError,fFatal;  public LevelDependFileAppender() {
      }  public LevelDependFileAppender(Layout layout, String sDebug,String sInfo,
       String sWarn,String sError,String sFatal) {
        this.layout = layout;
    setFiles(sDebug,sInfo,sWarn,sError,sFatal);
      }  public
      void setdebugFile(String value) {
        if(value!=null){
    debugFile= value.trim();  
        }else{
         LogLog.warn("debugFile can not be null");
        } 
      }  public
      String getdebugFile() {
        return debugFile;
      }  public
      void setinfoFile(String value) {
    if(value!=null){
    infoFile= value.trim();  
    }else{
    LogLog.warn("InfoFile can not be null");

      }  public
      String getInfoFile() {
    return infoFile;
      }
      public
      void setwarnFile(String value) {
    if(value!=null){
    warnFile= value.trim();  
    }else{
    LogLog.warn("warnFile can not be null");

      }  public
      String getwarnFile() {
    return warnFile;
      }
      public
      void seterrorFile(String value) {
    if(value!=null){
    errorFile= value.trim();  
    }else{
    LogLog.warn("errorFile can not be null");

      }  public
      String geterrorFile() {
    return errorFile;
      }
      public
      void setfatalFile(String value) {
    if(value!=null){
    fatalFile= value.trim();  
    }else{
    LogLog.warn("fatalFile can not be null");

      }  public
      String getfatalFile() {
    return fatalFile;
      }
      
      public
      void setFiles(String sDebug,String sInfo,
       String sWarn,String sError,String sFatal){
    setdebugFile(sDebug);
    setinfoFile(sInfo);
    setwarnFile(sWarn);
    seterrorFile(sError);
    setfatalFile(sFatal);
    activateOptions();
      }
      

  2.   


      public
      void activateOptions() {
       OutputStreamWriter wrDebug,wrInfo,wrWarn,wrError,wrFatal;
       try{
       fDebug=new File(debugFile);
       wrDebug=new OutputStreamWriter(new FileOutputStream(fDebug));
      
       fInfo=new File(infoFile);
       if(fInfo.getPath().equalsIgnoreCase(fDebug.getPath())){
       fInfo=fDebug;
       wrInfo=wrDebug;
       }else wrInfo=new OutputStreamWriter(new FileOutputStream(fInfo));
      
       fWarn=new File(warnFile);
    if(fWarn.getPath().equalsIgnoreCase(fDebug.getPath())){
    fWarn=fDebug;
    wrWarn=wrDebug;
    }
    else if(fWarn.getPath().equalsIgnoreCase(fInfo.getPath())){
    fWarn=fInfo;
    wrWarn=wrInfo;
    }else wrWarn=new OutputStreamWriter(new FileOutputStream(fWarn));

    fError=new File(errorFile);
    if(fError.getPath().equalsIgnoreCase(fDebug.getPath())){
    fError=fDebug;
    wrError=wrDebug;
    }
    else if(fError.getPath().equalsIgnoreCase(fInfo.getPath())){
    fError=fInfo;
    wrError=wrInfo;
    }
    else if(fError.getPath().equalsIgnoreCase(fWarn.getPath())){
    fError=fWarn;
    wrError=wrWarn;
    }else wrError=new OutputStreamWriter(new FileOutputStream(fError));

    fFatal=new File(fatalFile);
    if(fFatal.getPath().equalsIgnoreCase(fDebug.getPath())){
    fFatal=fDebug;
    wrFatal=wrDebug;
    }
    else if(fFatal.getPath().equalsIgnoreCase(fInfo.getPath())){
    fFatal=fInfo;
    wrFatal=wrInfo;
    }
    else if(fFatal.getPath().equalsIgnoreCase(fWarn.getPath())){
    fFatal=fWarn;
    wrFatal=wrWarn;
    }
    else if(fFatal.getPath().equalsIgnoreCase(fError.getPath())){
    fFatal=fError;
    wrFatal=wrError;
    }else wrFatal=new OutputStreamWriter(new FileOutputStream(fFatal));

          setWriters(wrDebug,wrInfo,wrWarn,wrError,wrFatal);
       }catch(Exception e){
       LogLog.error("Can not open file!",e);
       }
    }
    }
    //LevelDependWriterAppender.javapackage org.apache.log4j;import java.io.IOException;
    import java.io.Writer;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;import org.apache.log4j.spi.ErrorHandler;
    import org.apache.log4j.spi.LoggingEvent;
    import org.apache.log4j.helpers.QuietWriter;
    import org.apache.log4j.helpers.LogLog;
    public class LevelDependWriterAppender extends AppenderSkeleton {  protected boolean immediateFlush = true;  protected String encoding;  protected QuietWriter qwDebug ;
      protected QuietWriter qwInfo;
      protected QuietWriter qwWarn;
      protected QuietWriter qwError;
      protected QuietWriter qwFatal;  public
      LevelDependWriterAppender() {
      }
      
      public
      LevelDependWriterAppender(Layout layout, OutputStream osDebug,OutputStream 
       osInfo,OutputStream osWarn,OutputStream osError,
    OutputStream osFatal) {
        this(layout, new OutputStreamWriter(osDebug), new OutputStreamWriter(osInfo), 
         new OutputStreamWriter(osWarn), new OutputStreamWriter(osError), 
         new OutputStreamWriter(osFatal));
      }  public
      LevelDependWriterAppender(Layout layout, Writer wrDebug, Writer wrInfo, 
       Writer wrWarn, Writer wrError, Writer wrFatal) {
        this.layout = layout;
        this.setWriters(wrDebug,wrInfo,wrWarn,wrError,wrFatal);
      }  public
      void setImmediateFlush(boolean value) {
        immediateFlush = value;
      }  public
      boolean getImmediateFlush() {
        return immediateFlush;
      }  public
      void activateOptions() {
      }  public
      void append(LoggingEvent event) {    if(!checkEntryConditions(event)) {
          return;
        }
        subAppend(event);
       }  protected
      boolean checkEntryConditions(LoggingEvent le) {
        if(this.closed) {
          LogLog.warn("Not allowed to write to a closed appender.");
          return false;
        }
        QuietWriter qw;
    switch(le.getLevel().level){
    case Level.DEBUG_INT:
    qw=qwDebug;
    break;
    case Level.INFO_INT:
    qw=qwInfo;
    break;
    case Level.WARN_INT:
    qw=qwWarn;
    break;
    case Level.ERROR_INT:
    qw=qwError;
    break;
    case Level.FATAL_INT:
    qw=qwFatal;
    break;
    default:
    errorHandler.error("Not surpported level to "+this.getClass().getName());
    return false;
    }
        if(qw == null) {
          errorHandler.error("No output stream or file used by"+le.getLevel().levelStr+
    "set for the appender named ["+name+"].");
          return false;
        }    if(this.layout == null) {
          errorHandler.error("No layout set for the appender named ["+ name+"].");
          return false;
        }
        return true;
      }  public
      synchronized
      void close() {
        if(this.closed)
          return;
        this.closed = true;
        writeFooter();
        reset();
      }  protected void closeWriter() {
        if(qwDebug != null) {
          try {
    qwDebug.close();
          } catch(IOException e) {
    LogLog.error("Could not close " + qwDebug, e);
          }
        }
    if(qwInfo != null) {
      try {
    qwInfo.close();
      } catch(IOException e) {
    LogLog.error("Could not close " + qwInfo, e);
      }
    }
    if(qwWarn != null) {
      try {
    qwWarn.close();
      } catch(IOException e) {
    LogLog.error("Could not close " + qwWarn, e);
      }
    }
    if(qwError != null) {
      try {
    qwError.close();
      } catch(IOException e) {
    LogLog.error("Could not close " + qwError, e);
      }
    }
    if(qwFatal != null) {
      try {
    qwFatal.close();
      } catch(IOException e) {
    LogLog.error("Could not close " + qwFatal, e);
      }
    }
      }  protected
      OutputStreamWriter createWriter(OutputStream os) {
        OutputStreamWriter retval = null;    String enc = getEncoding();
        if(enc != null) {
          try {
    retval = new OutputStreamWriter(os, enc);
          } catch(IOException e) {
    LogLog.warn("Error initializing output writer.");
    LogLog.warn("Unsupported encoding?");
          }
        }
        if(retval == null) {
          retval = new OutputStreamWriter(os);
        }
        return retval;
      }  public String getEncoding() {
        return encoding;
      }  public void setEncoding(String value) {
        encoding = value;
      }
      

  3.   

    public synchronized void setErrorHandler(ErrorHandler eh) {
        if(eh == null) {
          LogLog.warn("You have tried to set a null error-handler.");
        } else {
          this.errorHandler = eh;
          if(this.qwDebug != null) {
    this.qwDebug.setErrorHandler(eh);
          }
      if(this.qwInfo != null) {
    this.qwInfo.setErrorHandler(eh);
      }
      if(this.qwWarn != null) {
    this.qwWarn.setErrorHandler(eh);
      }
      if(this.qwError != null) {
    this.qwError.setErrorHandler(eh);
      }
      if(this.qwFatal != null) {
    this.qwFatal.setErrorHandler(eh);
      }
        }
      }  public synchronized void setWriters(Writer wrDebug,Writer wrInfo,
       Writer wrWarn,Writer wrError,Writer wrFatal) {
        reset();
        this.qwDebug = new QuietWriter(wrDebug, errorHandler);
        
        if(wrInfo==wrDebug)
         this.qwInfo=this.qwDebug;
        else this.qwInfo = new QuietWriter(wrInfo, errorHandler);

    if(wrWarn==wrDebug)
    this.qwWarn=this.qwDebug;
    else if(wrWarn==wrInfo)
    this.qwWarn=this.qwInfo;
    else this.qwWarn = new QuietWriter(wrWarn, errorHandler);

    if(wrError==wrDebug)
    this.qwError=this.qwDebug;
    else if(wrError==wrInfo)
    this.qwError=this.qwInfo;
    else if(wrError==wrWarn)
    this.qwError=this.qwWarn;
    else this.qwError = new QuietWriter(wrError, errorHandler);

    if(wrFatal==wrDebug)
    this.qwFatal=this.qwDebug;
    else if(wrFatal==wrInfo)
    this.qwFatal=this.qwInfo;
    else if(wrFatal==wrWarn)
    this.qwFatal=this.qwWarn;
    else if(wrFatal==wrError)
    this.qwFatal=this.qwError;
    else this.qwFatal = new QuietWriter(wrFatal, errorHandler);
        //this.tp = new TracerPrintWriter(qw);
        writeHeader();
      }  protected
      void subAppend(LoggingEvent event) {
    QuietWriter qw;
    switch(event.getLevel().level){
    case Level.DEBUG_INT:
    qw=qwDebug;
    break;
    case Level.INFO_INT:
    qw=qwInfo;
    break;
    case Level.WARN_INT:
    qw=qwWarn;
    break;
    case Level.ERROR_INT:
    qw=qwError;
    break;
    case Level.FATAL_INT:
    qw=qwFatal;
    break;
    default:
    errorHandler.error("Not surpported level to "+this.getClass().getName());
    return;
    }
        qw.write(this.layout.format(event));    if(layout.ignoresThrowable()) {
          String[] s = event.getThrowableStrRep();
          if (s != null) {
    int len = s.length;
    for(int i = 0; i < len; i++) {
      qw.write(s[i]);
      qw.write(Layout.LINE_SEP);
    }
          }
        }    if(this.immediateFlush) {
          qw.flush();
        }
      }  public
      boolean requiresLayout() {
        return true;
      }  protected
      void reset() {
        closeWriter();
        this.qwDebug = null;
    this.qwInfo = null;
    this.qwWarn = null;
    this.qwError = null;
    this.qwFatal = null;
        //this.tp = null;
      }  protected
      void writeFooter() {
        if(layout != null) {
          String f = layout.getFooter();
          if(f != null){
           if(this.qwDebug != null) {
    this.qwDebug.write(f);
    this.qwDebug.flush();
           }
    if((this.qwInfo != null)&&(this.qwDebug!=this.qwInfo)) {
    this.qwInfo.write(f);
    this.qwInfo.flush();
    }
    if((this.qwWarn != null)&&(this.qwWarn!=this.qwInfo)
    &&(this.qwWarn!=this.qwDebug)){
    this.qwWarn.write(f);
    this.qwWarn.flush();
    }
    if((this.qwError != null)&&(this.qwError!=this.qwWarn)
    &&(this.qwError!=this.qwInfo)&&(this.qwError!=this.qwDebug)){
    this.qwError.write(f);
    this.qwError.flush();
    }
    if((this.qwFatal != null)&&(this.qwFatal!=this.qwError)
    &&(this.qwFatal!=this.qwWarn)&&(this.qwFatal!=this.qwInfo)
    &&(this.qwFatal!=this.qwDebug)){
    this.qwFatal.write(f);
    this.qwFatal.flush();
    }      }      }
        }  protected
      void writeHeader() {
        if(layout != null) {
          String h = layout.getHeader();
          if(h != null){
           if(this.qwDebug != null)
    this.qwDebug.write(h);

    if((this.qwInfo != null)&&(this.qwDebug!=this.qwInfo))
    this.qwInfo.write(h);

    if((this.qwWarn != null)&&(this.qwWarn!=this.qwInfo)
    &&(this.qwWarn!=this.qwDebug))
    this.qwWarn.write(h);

    if((this.qwError != null)&&(this.qwError!=this.qwWarn)
    &&(this.qwError!=this.qwInfo)&&(this.qwError!=this.qwDebug))
    this.qwError.write(h);

    if((this.qwFatal != null)&&(this.qwFatal!=this.qwError)
    &&(this.qwFatal!=this.qwWarn)&&(this.qwFatal!=this.qwInfo)
    &&(this.qwFatal!=this.qwDebug))
    this.qwFatal.write(h);
          }    }
      }
    }
    -----------------
    //log4j.properties
    log4j.debug=true
    log4j.rootLogger=,A1
    log4j.appender.A1=org.apache.log4j.LevelDependFileAppender
    log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
    log4j.appender.A1.debugFile=log4j_debug.log
    log4j.appender.A1.infoFile=log4j_info.log
    log4j.appender.A1.warnFile=log4j_warn.log
    log4j.appender.A1.errorFile=log4j_error.log
    log4j.appender.A1.fatalFile=log4j_fatal.log
    -------------
    //使用
    PropertyConfigurator.configure("log4j.properties");
    Logger log=Logger.getLogger(className);
    log.info("This is info msg");
    log.debug("This is debug msg");
    log.warn("This is warn msg");
    log.error("This is error msg");
    log.fatal("This is fatal msg");
    log.info("Another info msg");
    log.fatal("Another fatal msg");