Coverage Report - org.jtheque.core.managers.log.Log4JConfigurator
 
Classes in this File Line Coverage Branch Coverage Complexity
Log4JConfigurator
0 %
0/36
0 %
0/6
1.5
 
 1  
 package org.jtheque.core.managers.log;
 2  
 
 3  
 import org.apache.log4j.Appender;
 4  
 import org.apache.log4j.ConsoleAppender;
 5  
 import org.apache.log4j.Layout;
 6  
 import org.apache.log4j.Level;
 7  
 import org.apache.log4j.Logger;
 8  
 import org.apache.log4j.PatternLayout;
 9  
 import org.apache.log4j.RollingFileAppender;
 10  
 import org.jtheque.core.managers.Managers;
 11  
 import org.jtheque.core.utils.SystemProperty;
 12  
 
 13  
 /*
 14  
  * This file is part of JTheque.
 15  
  *
 16  
  * JTheque is free software: you can redistribute it and/or modify
 17  
  * it under the terms of the GNU General Public License as published by
 18  
  * the Free Software Foundation, either version 3 of the License.
 19  
  *
 20  
  * JTheque is distributed in the hope that it will be useful,
 21  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 22  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 23  
  * GNU General Public License for more details.
 24  
  *
 25  
  * You should have received a copy of the GNU General Public License
 26  
  * along with JTheque.  If not, see <http://www.gnu.org/licenses/>.
 27  
  */
 28  
 
 29  
 /**
 30  
  * @author Baptiste Wicht
 31  
  */
 32  
 public final class Log4JConfigurator {
 33  0
     private static final RollingFileAppender FILE_APPENDER = new RollingFileAppender();
 34  
 
 35  
     private static final String MAX_FILE_SIZE = "500KB";
 36  
 
 37  
     /**
 38  
      * This is an utility class, not instanciable.
 39  
      */
 40  
     private Log4JConfigurator() {
 41  0
         super();
 42  0
     }
 43  
 
 44  
     /**
 45  
      * Configure Log4J.
 46  
      */
 47  
     public static void configure() {
 48  0
         System.setProperty("log4j.defaultInitOverride", "true");
 49  
 
 50  0
         PatternLayout layout = new PatternLayout();
 51  0
         layout.setConversionPattern("%d{ABSOLUTE} %5p %c{1}:%L - %m%n");
 52  
 
 53  0
         addConsoleAppender(layout);
 54  
 
 55  0
         addFileAppender(FILE_APPENDER, Managers.getCore().getFiles().getLogsFile().getAbsolutePath(), layout);
 56  
 
 57  0
         String level = "ERROR";
 58  
 
 59  0
         if (Managers.getCore().getApplication().getProperty("jtheque.log") != null) {
 60  0
             level = Managers.getCore().getApplication().getProperty("jtheque.log");
 61  0
         } else if (SystemProperty.JTHEQUE_LOG.get() != null) {
 62  0
             level = SystemProperty.JTHEQUE_LOG.get();
 63  
         }
 64  
 
 65  0
         Logger.getRootLogger().setLevel(Level.toLevel(level));
 66  0
     }
 67  
 
 68  
     /**
 69  
      * Add a console appender.
 70  
      *
 71  
      * @param layout The layout of the appender.
 72  
      */
 73  
     private static void addConsoleAppender(Layout layout) {
 74  0
         ConsoleAppender console = new ConsoleAppender();
 75  0
         console.setTarget("System.out");
 76  0
         console.setLayout(layout);
 77  
 
 78  0
         console.activateOptions();
 79  
 
 80  0
         Logger.getRootLogger().addAppender(console);
 81  0
     }
 82  
 
 83  
     /**
 84  
      * Add a file appender.
 85  
      *
 86  
      * @param file     The file appender.
 87  
      * @param filePath The file path.
 88  
      * @param layout   The layout of the appender.
 89  
      */
 90  
     private static void addFileAppender(RollingFileAppender file, String filePath, Layout layout) {
 91  0
         file.setAppend(true);
 92  0
         file.setBufferedIO(true);
 93  0
         file.setFile(filePath);
 94  0
         file.setLayout(layout);
 95  0
         file.setMaxBackupIndex(10);
 96  0
         file.setMaxFileSize(MAX_FILE_SIZE);
 97  
 
 98  0
         file.activateOptions();
 99  
 
 100  0
         Logger.getRootLogger().addAppender(file);
 101  0
     }
 102  
 
 103  
     /**
 104  
      * Close Log4J.
 105  
      */
 106  
     public static void close() {
 107  0
         removeAndCloseAppender(FILE_APPENDER);
 108  0
     }
 109  
 
 110  
     /**
 111  
      * Remove and close an appender.
 112  
      *
 113  
      * @param appender The appender to close and remove.
 114  
      */
 115  
     private static void removeAndCloseAppender(Appender appender) {
 116  0
         if (appender != null) {
 117  0
             appender.close();
 118  
 
 119  0
             Logger.getRootLogger().removeAppender(appender);
 120  
         }
 121  0
     }
 122  
 }