Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Logback: the reliable, generic, fast and flexible logging framework. Copyright (C) 1999-2011, QOS.ch. All rights reserved. This program and the accompanying materials are dual-licensed under either the terms of the Eclipse Public License v1.0 as published by the Eclipse Foundation or (per the licensee's choosing) under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.
 
 package ch.qos.logback.core.recovery;
 
 
 
 abstract public class ResilientOutputStreamBase extends OutputStream {
 
   final static int STATUS_COUNT_LIMIT = 2 * 4;
 
   private int noContextWarning = 0;
   private int statusCount = 0;
 
   private Context context;
 
   protected OutputStream os;
   protected boolean presumedClean = true;
 
   private boolean isPresumedInError() {
     // existence of recoveryCoordinator indicates failed state
     return ( != null && !);
   }
 
   public void write(byte b[], int offint len) {
     if (isPresumedInError()) {
       if (!.isTooSoon()) {
         attemptRecovery();
       }
       return// return regardless of the success of the recovery attempt
     }
 
     try {
       .write(bofflen);
       postSuccessfulWrite();
     } catch (IOException e) {
       postIOFailure(e);
     }
   }
 
   @Override
   public void write(int b) {
     if (isPresumedInError()) {
       if (!.isTooSoon()) {
         attemptRecovery();
       }
       return// return regardless of the success of the recovery attempt
     }
     try {
       .write(b);
       postSuccessfulWrite();
     } catch (IOException e) {
       postIOFailure(e);
     }
   }
 
   @Override
   public void flush() {
     if ( != null) {
       try {
         .flush();
         postSuccessfulWrite();
       } catch (IOException e) {
         postIOFailure(e);
       }
     }
   }
 
   abstract String getDescription();
 
   abstract OutputStream openNewOutputStream() throws IOException;
 
   private void postSuccessfulWrite() {
     if ( != null) {
        = null;
        = 0;
       addStatus(new InfoStatus("Recovered from IO failure on "
           + getDescription(), this));
     }
   }
 
  void postIOFailure(IOException e) {
    addStatusIfCountNotOverLimit(new ErrorStatus("IO failure while writing to "
        + getDescription(), thise));
     = false;
    if ( == null) {
    }
  }
  public void close() throws IOException {
    if ( != null) {
      .close();
    }
  }
  void attemptRecovery() {
    try {
      close();
    } catch (IOException e) {
    }
        "Attempting to recover from IO failure on " + getDescription(), this));
    // subsequent writes must always be in append mode
    try {
       = openNewOutputStream();
       = true;
    } catch (IOException e) {
      addStatusIfCountNotOverLimit(new ErrorStatus("Failed to open "
          + getDescription(), thise));
    }
  }
    ++;
    if ( < ) {
      addStatus(s);
    }
    if ( == ) {
      addStatus(s);
      addStatus(new InfoStatus("Will supress future messages regarding "
          + getDescription(), this));
    }
  }
  public void addStatus(Status status) {
    if ( == null) {
      if (++ == 0) {
        ..println("LOGBACK: No context given for " + this);
      }
      return;
    }
    if (sm != null) {
      sm.add(status);
    }
  }
  public Context getContext() {
    return ;
  }
  public void setContext(Context context) {
    this. = context;
  }
New to GrepCode? Check out our FAQ X