// Path: src/main/java/com/stuartwarren/logit/utils/LogitLog.java
// public final class LogitLog {
// 
//   /**
//      Defining this value makes logit print logit-internal debug
//      statements to <code>System.out</code>.
//      
//     <p> The value of this string is <b>logit.debug</b>.
//     
//     <p>Note that the search for all option names is case sensitive.  
//    */
//   public static final String DEBUG_KEY="logit.debug";
//   public static final String TRACE_KEY="logit.trace";
//   private static boolean debugEnabled;
//   private static boolean traceEnabled;
// 
//   /**
//      In quietMode not even errors generate any output.
//    */
//   private static boolean quietMode;
// 
//   private static final String PREFIX = "logit: ";
//   private static final String TRACE_PREFIX = "logit:TRACE ";
//   private static final String ERR_PREFIX = "logit:ERROR ";
//   private static final String WARN_PREFIX = "logit:WARN ";
// 
//   static {
//     final String key = OptionConverter.getSystemProperty(DEBUG_KEY, null);
//     final String tkey = OptionConverter.getSystemProperty(TRACE_KEY, null);
//     if(key != null || tkey != null) { 
//         debugEnabled = OptionConverter.toBoolean(key, true);
//     }
//     if(tkey != null) {
//         traceEnabled = OptionConverter.toBoolean(tkey, true);
//     }
//   }
//   
//   private LogitLog() {
//       
//   }
// 
//   /**
//      Allows to enable/disable logit internal logging.
//    */
//   static
//   public
//   void setInternalDebugging(final boolean enabled) {
//     debugEnabled = enabled;
//   }
//   
//   static
//   public
//   boolean isDebugEnabled() {
//       return debugEnabled;
//   }
//   
//   static
//   public
//   boolean isTraceEnabled() {
//       return traceEnabled;
//   }
// 
//   
//   /**
//   This method is used to output logit internal debug
//   statements. Output goes to <code>System.out</code>.
//     */
//     public
//     static
//     void trace(final String msg) {
//      if(traceEnabled && !quietMode) {
//        System.out.println(TRACE_PREFIX+msg);
//      }
//     }
//     
//     /**
//       This method is used to output logit internal debug
//       statements. Output goes to <code>System.out</code>.
//     */
//     public
//     static
//     void trace(final String msg, final Throwable t) {
//      if(traceEnabled && !quietMode) {
//        System.out.println(TRACE_PREFIX+msg);
//        if(t != null) {
//          t.printStackTrace(System.out);
//        }
//      }
//     }
//   /**
//      This method is used to output logit internal debug
//      statements. Output goes to <code>System.out</code>.
//   */
//   public
//   static
//   void debug(final String msg) {
//     if(debugEnabled && !quietMode) {
//       System.out.println(PREFIX+msg);
//     }
//   }
// 
//   /**
//      This method is used to output logit internal debug
//      statements. Output goes to <code>System.out</code>.
//   */
//   public
//   static
//   void debug(final String msg, final Throwable t) {
//     if(debugEnabled && !quietMode) {
//       System.out.println(PREFIX+msg);
//       if(t != null) {
//         t.printStackTrace(System.out);
//       }
//     }
//   }
//   
// 
//   /**
//      This method is used to output logit internal error
//      statements. There is no way to disable error statements.
//      Output goes to <code>System.err</code>.
//   */
//   public
//   static
//   void error(final String msg) {
//     if(quietMode){
//       return;
//     }
//     System.err.println(ERR_PREFIX+msg);
//   }  
// 
//   /**
//      This method is used to output logit internal error
//      statements. There is no way to disable error statements.
//      Output goes to <code>System.err</code>.  
//   */
//   public
//   static
//   void error(final String msg, final Throwable t) {
//     if(quietMode) {
//       return;
//     }
//     System.err.println(ERR_PREFIX+msg);
//     if(t != null) {
//       t.printStackTrace();
//     }
//   }  
// 
//   /**
//      In quite mode LogitLog generates strictly no output, not even
//      for errors. 
// 
//      @param quietMode A true for not
//   */
//   public
//   static
//   void setQuietMode(final boolean quietMode) {
//     LogitLog.quietMode = quietMode;
//   }
// 
//   /**
//      This method is used to output logit internal warning
//      statements. There is no way to disable warning statements.
//      Output goes to <code>System.err</code>.  */
//   public
//   static
//   void warn(final String msg) {
//     if(quietMode) {
//       return;
//     }
//     System.err.println(WARN_PREFIX+msg);
//   }  
// 
//   /**
//      This method is used to output logit internal warnings. There is
//      no way to disable warning statements.  Output goes to
//      <code>System.err</code>.  */
//   public
//   static
//   void warn(final String msg, final Throwable t) {
//     if(quietMode) {
//       return;
//     }
//     System.err.println(WARN_PREFIX+msg);
//     if(t != null) {
//       t.printStackTrace();
//     }
//   }  
// }


import java.util.logging.LogManager;
import com.stuartwarren.logit.utils.LogitLog;
/**
 * 
 */
package com.stuartwarren.logit.jul;




/**
 * @author Stuart Warren 
 * @date 6 Oct 2013
 * 
 * Log4j1 Shutdown hook
 */
public class ShutdownHook {
    public void attachShutDownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                LogitLog.debug("Inside ShutDown Hook");
                LogManager.getLogManager().reset();
            }
        });
// Path: src/main/java/com/stuartwarren/logit/utils/LogitLog.java
// public final class LogitLog {
// 
//   /**
//      Defining this value makes logit print logit-internal debug
//      statements to <code>System.out</code>.
//      
//     <p> The value of this string is <b>logit.debug</b>.
//     
//     <p>Note that the search for all option names is case sensitive.  
//    */
//   public static final String DEBUG_KEY="logit.debug";
//   public static final String TRACE_KEY="logit.trace";
//   private static boolean debugEnabled;
//   private static boolean traceEnabled;
// 
//   /**
//      In quietMode not even errors generate any output.
//    */
//   private static boolean quietMode;
// 
//   private static final String PREFIX = "logit: ";
//   private static final String TRACE_PREFIX = "logit:TRACE ";
//   private static final String ERR_PREFIX = "logit:ERROR ";
//   private static final String WARN_PREFIX = "logit:WARN ";
// 
//   static {
//     final String key = OptionConverter.getSystemProperty(DEBUG_KEY, null);
//     final String tkey = OptionConverter.getSystemProperty(TRACE_KEY, null);
//     if(key != null || tkey != null) { 
//         debugEnabled = OptionConverter.toBoolean(key, true);
//     }
//     if(tkey != null) {
//         traceEnabled = OptionConverter.toBoolean(tkey, true);
//     }
//   }
//   
//   private LogitLog() {
//       
//   }
// 
//   /**
//      Allows to enable/disable logit internal logging.
//    */
//   static
//   public
//   void setInternalDebugging(final boolean enabled) {
//     debugEnabled = enabled;
//   }
//   
//   static
//   public
//   boolean isDebugEnabled() {
//       return debugEnabled;
//   }
//   
//   static
//   public
//   boolean isTraceEnabled() {
//       return traceEnabled;
//   }
// 
//   
//   /**
//   This method is used to output logit internal debug
//   statements. Output goes to <code>System.out</code>.
//     */
//     public
//     static
//     void trace(final String msg) {
//      if(traceEnabled && !quietMode) {
//        System.out.println(TRACE_PREFIX+msg);
//      }
//     }
//     
//     /**
//       This method is used to output logit internal debug
//       statements. Output goes to <code>System.out</code>.
//     */
//     public
//     static
//     void trace(final String msg, final Throwable t) {
//      if(traceEnabled && !quietMode) {
//        System.out.println(TRACE_PREFIX+msg);
//        if(t != null) {
//          t.printStackTrace(System.out);
//        }
//      }
//     }
//   /**
//      This method is used to output logit internal debug
//      statements. Output goes to <code>System.out</code>.
//   */
//   public
//   static
//   void debug(final String msg) {
//     if(debugEnabled && !quietMode) {
//       System.out.println(PREFIX+msg);
//     }
//   }
// 
//   /**
//      This method is used to output logit internal debug
//      statements. Output goes to <code>System.out</code>.
//   */
//   public
//   static
//   void debug(final String msg, final Throwable t) {
//     if(debugEnabled && !quietMode) {
//       System.out.println(PREFIX+msg);
//       if(t != null) {
//         t.printStackTrace(System.out);
//       }
//     }
//   }
//   
// 
//   /**
//      This method is used to output logit internal error
//      statements. There is no way to disable error statements.
//      Output goes to <code>System.err</code>.
//   */
//   public
//   static
//   void error(final String msg) {
//     if(quietMode){
//       return;
//     }
//     System.err.println(ERR_PREFIX+msg);
//   }  
// 
//   /**
//      This method is used to output logit internal error
//      statements. There is no way to disable error statements.
//      Output goes to <code>System.err</code>.  
//   */
//   public
//   static
//   void error(final String msg, final Throwable t) {
//     if(quietMode) {
//       return;
//     }
//     System.err.println(ERR_PREFIX+msg);
//     if(t != null) {
//       t.printStackTrace();
//     }
//   }  
// 
//   /**
//      In quite mode LogitLog generates strictly no output, not even
//      for errors. 
// 
//      @param quietMode A true for not
//   */
//   public
//   static
//   void setQuietMode(final boolean quietMode) {
//     LogitLog.quietMode = quietMode;
//   }
// 
//   /**
//      This method is used to output logit internal warning
//      statements. There is no way to disable warning statements.
//      Output goes to <code>System.err</code>.  */
//   public
//   static
//   void warn(final String msg) {
//     if(quietMode) {
//       return;
//     }
//     System.err.println(WARN_PREFIX+msg);
//   }  
// 
//   /**
//      This method is used to output logit internal warnings. There is
//      no way to disable warning statements.  Output goes to
//      <code>System.err</code>.  */
//   public
//   static
//   void warn(final String msg, final Throwable t) {
//     if(quietMode) {
//       return;
//     }
//     System.err.println(WARN_PREFIX+msg);
//     if(t != null) {
//       t.printStackTrace();
//     }
//   }  
// }


// Path: src/main/java/com/stuartwarren/logit/jul/ShutdownHook.java
import java.util.logging.LogManager;
import com.stuartwarren.logit.utils.LogitLog;

/**
 * 
 */
package com.stuartwarren.logit.jul;




/**
 * @author Stuart Warren 
 * @date 6 Oct 2013
 * 
 * Log4j1 Shutdown hook
 */
public class ShutdownHook {
    public void attachShutDownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                LogitLog.debug("Inside ShutDown Hook");
                LogManager.getLogManager().reset();
            }
        });
        LogitLog.debug("ShutDown Hook Attached.");