// Path: logful/src/main/java/com/getui/logful/layout/Layout.java
// public interface Layout {
// 
//     byte[] toBytes(LogEvent event);
// 
// }
// 
// Path: logful/src/main/java/com/getui/logful/util/LogUtil.java
// public class LogUtil {
// 
//     public static void d(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.d(tag, msg);
//         }
//     }
// 
//     public static void d(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.d(tag, msg, tr);
//         }
//     }
// 
//     public static void e(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.e(tag, msg);
//         }
//     }
// 
//     public static void e(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.e(tag, msg, tr);
//         }
//     }
// 
//     public static void i(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.i(tag, msg);
//         }
//     }
// 
//     public static void i(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.i(tag, msg, tr);
//         }
//     }
// 
//     public static void v(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.v(tag, msg, tr);
//         }
//     }
// 
//     public static void v(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.v(tag, msg);
//         }
//     }
// 
//     public static void w(String tag, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.w(tag, tr);
//         }
//     }
// 
//     public static void w(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.w(tag, msg, tr);
//         }
//     }
// 
//     public static void w(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.w(tag, msg);
//         }
//     }
// 
//     public static void wtf(String tag, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.wtf(tag, tr);
//         }
//     }
// 
//     public static void wtf(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.wtf(tag, msg, tr);
//         }
//     }
// 
//     public static void wtf(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.wtf(tag, msg);
//         }
//     }
// }


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import com.getui.logful.layout.Layout;
import com.getui.logful.util.LogUtil;
package com.getui.logful.appender;



public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager> extends AbstractAppender {

    protected final boolean immediateFlush;

    private final M manager;

    private final ReadWriteLock rwLock = new ReentrantReadWriteLock();

    private final Lock readLock = rwLock.readLock();

    private boolean isWriting;

// Path: logful/src/main/java/com/getui/logful/layout/Layout.java
// public interface Layout {
// 
//     byte[] toBytes(LogEvent event);
// 
// }
// 
// Path: logful/src/main/java/com/getui/logful/util/LogUtil.java
// public class LogUtil {
// 
//     public static void d(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.d(tag, msg);
//         }
//     }
// 
//     public static void d(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.d(tag, msg, tr);
//         }
//     }
// 
//     public static void e(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.e(tag, msg);
//         }
//     }
// 
//     public static void e(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.e(tag, msg, tr);
//         }
//     }
// 
//     public static void i(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.i(tag, msg);
//         }
//     }
// 
//     public static void i(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.i(tag, msg, tr);
//         }
//     }
// 
//     public static void v(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.v(tag, msg, tr);
//         }
//     }
// 
//     public static void v(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.v(tag, msg);
//         }
//     }
// 
//     public static void w(String tag, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.w(tag, tr);
//         }
//     }
// 
//     public static void w(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.w(tag, msg, tr);
//         }
//     }
// 
//     public static void w(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.w(tag, msg);
//         }
//     }
// 
//     public static void wtf(String tag, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.wtf(tag, tr);
//         }
//     }
// 
//     public static void wtf(String tag, String msg, Throwable tr) {
//         if (LoggerFactory.isDebug()) {
//             Log.wtf(tag, msg, tr);
//         }
//     }
// 
//     public static void wtf(String tag, String msg) {
//         if (LoggerFactory.isDebug()) {
//             Log.wtf(tag, msg);
//         }
//     }
// }


// Path: logful/src/main/java/com/getui/logful/appender/AbstractOutputStreamAppender.java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import com.getui.logful.layout.Layout;
import com.getui.logful.util.LogUtil;

package com.getui.logful.appender;



public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager> extends AbstractAppender {

    protected final boolean immediateFlush;

    private final M manager;

    private final ReadWriteLock rwLock = new ReentrantReadWriteLock();

    private final Lock readLock = rwLock.readLock();

    private boolean isWriting;

    protected AbstractOutputStreamAppender(String loggerName, Layout layout, boolean ignoreExceptions,