Coverage Report - net.admin4j.log.Log4JLogManager
 
Classes in this File Line Coverage Branch Coverage Complexity
Log4JLogManager
53%
33/62
29%
14/48
8.833
 
 1  
 /*
 2  
  * This software is licensed under the Apache License, Version 2.0
 3  
  * (the "License") agreement; you may not use this file except in compliance with
 4  
  * the License.  You may obtain a copy of the License at
 5  
  * 
 6  
  *      http://www.apache.org/licenses/LICENSE-2.0
 7  
  * 
 8  
  * Unless required by applicable law or agreed to in writing, software
 9  
  * distributed under the License is distributed on an "AS IS" BASIS,
 10  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 11  
  * See the License for the specific language governing permissions and
 12  
  * limitations under the License.
 13  
  */
 14  
 package net.admin4j.log;
 15  
 
 16  
 import java.util.ArrayList;
 17  
 import java.util.Collections;
 18  
 import java.util.Enumeration;
 19  
 import java.util.List;
 20  
 
 21  
 import net.admin4j.exception.Log4JExceptionAppender;
 22  
 import net.admin4j.ui.servlets.LogLevelServlet;
 23  
 import net.admin4j.util.Admin4jRuntimeException;
 24  
 import net.admin4j.util.annotate.Product;
 25  
 import net.admin4j.util.annotate.ProductDependencies;
 26  
 import net.admin4j.vo.LoggerVO;
 27  
 
 28  
 /**
 29  
  * Log4J Implementation of a Log Manager.
 30  
  * @author M. Lyons
 31  
  *
 32  
  */
 33  
 @ProductDependencies( {Product.LOG4J} )
 34  12
 public class Log4JLogManager implements LogManager {
 35  
 
 36  
     @SuppressWarnings("rawtypes")
 37  
     public List<LoggerVO> findLoggers() {
 38  9
         List<LoggerVO> loggerVOs = new ArrayList<LoggerVO>();
 39  
         
 40  9
         String rootName = org.apache.log4j.LogManager.getRootLogger().getName();
 41  9
         String rootLevel = org.apache.log4j.LogManager.getRootLogger().getLevel().toString();
 42  9
         LoggerVO rootLoggerVO = new LoggerVO(rootName, rootLevel, this.getLoggerSoftwareProductName());
 43  
         
 44  9
         org.apache.log4j.spi.LoggerRepository lr = org.apache.log4j.LogManager.getLoggerRepository();
 45  9
         Enumeration loggers = lr.getCurrentLoggers();
 46  
 
 47  9
         while (loggers.hasMoreElements())
 48  
         {
 49  0
             Object o = loggers.nextElement();
 50  0
             org.apache.log4j.Logger logger = (org.apache.log4j.Logger)o; 
 51  0
             String loggerName = logger.getName();
 52  0
             String loggerLevel = LogLevelServlet.NONE;
 53  0
             org.apache.log4j.Level level = logger.getLevel();
 54  0
             if (level != null)
 55  
             {
 56  0
                 loggerLevel = level.toString();
 57  
             }
 58  0
             LoggerVO loggerVO = new LoggerVO(loggerName, loggerLevel, this.getLoggerSoftwareProductName());
 59  0
             loggerVOs.add(loggerVO);
 60  0
         }
 61  9
         Collections.sort(loggerVOs);
 62  9
         loggerVOs.add(0, rootLoggerVO);
 63  
         
 64  9
         return loggerVOs;
 65  
     }
 66  
 
 67  
     public String performLogLevelChange(String requestedLoggerName,
 68  
             LogIncrementType logIncrementType) {
 69  12
         org.apache.log4j.Logger l = org.apache.log4j.LogManager.getLoggerRepository().getLogger(requestedLoggerName);
 70  12
         if (l==null)
 71  
         {
 72  0
             throw new Admin4jRuntimeException("Logger not found")
 73  
             .addContextValue("requestedLoggerName", requestedLoggerName);
 74  
         }
 75  
 
 76  12
         org.apache.log4j.Level lvl = l.getLevel();
 77  12
         if (LogIncrementType.SHOW_MORE.equals(logIncrementType))
 78  
         {
 79  3
             if (lvl==null)
 80  
             {   
 81  3
                 l.setLevel( org.apache.log4j.Level.INFO );
 82  3
                 return l.getLevel().toString();
 83  
             }
 84  
             else
 85  
             {
 86  0
                 l.setLevel( showMoreLog4JLogging(l.getLevel()) );
 87  0
                 return l.getLevel().toString();
 88  
             }
 89  
         }
 90  9
         else if (LogIncrementType.SHOW_LESS.equals(logIncrementType))
 91  
         {
 92  3
             if (lvl==null)
 93  
             {   
 94  0
                 l.setLevel( org.apache.log4j.Level.WARN );
 95  0
                 return l.getLevel().toString();
 96  
             }
 97  
             else
 98  
             {
 99  3
                 l.setLevel( showLessLog4JLogging(l.getLevel()) );
 100  3
                 return l.getLevel().toString();
 101  
             }
 102  
         }
 103  6
         else if (LogIncrementType.CLEAR.equals(logIncrementType))
 104  
         {
 105  6
             l.setLevel( null );
 106  6
             return "";
 107  
         }
 108  
         else {
 109  0
             throw new Admin4jRuntimeException("Unsupported Log Increment Type")
 110  
                 .addContextValue("logIncrementType", logIncrementType);
 111  
         }
 112  
         
 113  
     }
 114  
     
 115  
     public void installExceptionTrackingLogAppender() {
 116  9
         org.apache.log4j.LogManager.getRootLogger().addAppender(new Log4JExceptionAppender());
 117  9
     }
 118  
     
 119  
     private static org.apache.log4j.Level showLessLog4JLogging(org.apache.log4j.Level lvl) {
 120  3
         if (org.apache.log4j.Level.OFF.equals(lvl)) return org.apache.log4j.Level.OFF;
 121  3
         if (org.apache.log4j.Level.FATAL.equals(lvl)) return org.apache.log4j.Level.OFF;
 122  3
         if (org.apache.log4j.Level.ERROR.equals(lvl)) return org.apache.log4j.Level.FATAL;
 123  3
         if (org.apache.log4j.Level.WARN.equals(lvl)) return org.apache.log4j.Level.ERROR;
 124  3
         if (org.apache.log4j.Level.INFO.equals(lvl)) return org.apache.log4j.Level.WARN;
 125  0
         if (org.apache.log4j.Level.DEBUG.equals(lvl)) return org.apache.log4j.Level.INFO;
 126  0
         if (org.apache.log4j.Level.TRACE.equals(lvl)) return org.apache.log4j.Level.DEBUG;
 127  0
         if (org.apache.log4j.Level.ALL.equals(lvl)) return org.apache.log4j.Level.TRACE;
 128  0
         return org.apache.log4j.Level.INFO;
 129  
     }
 130  
     
 131  
     private static org.apache.log4j.Level showMoreLog4JLogging(org.apache.log4j.Level lvl) {
 132  0
         if (org.apache.log4j.Level.ALL.equals(lvl)) return org.apache.log4j.Level.ALL;
 133  0
         if (org.apache.log4j.Level.TRACE.equals(lvl)) return org.apache.log4j.Level.ALL;
 134  0
         if (org.apache.log4j.Level.DEBUG.equals(lvl)) return org.apache.log4j.Level.TRACE;
 135  0
         if (org.apache.log4j.Level.INFO.equals(lvl)) return org.apache.log4j.Level.DEBUG;
 136  0
         if (org.apache.log4j.Level.WARN.equals(lvl)) return org.apache.log4j.Level.INFO;
 137  0
         if (org.apache.log4j.Level.ERROR.equals(lvl)) return org.apache.log4j.Level.WARN;
 138  0
         if (org.apache.log4j.Level.FATAL.equals(lvl)) return org.apache.log4j.Level.ERROR;
 139  0
         if (org.apache.log4j.Level.OFF.equals(lvl)) return org.apache.log4j.Level.FATAL;
 140  0
         return org.apache.log4j.Level.INFO;
 141  
     }
 142  
 
 143  
     /* (non-Javadoc)
 144  
      * @see net.admin4j.log.LogManager#getLoggerSoftwareProductName()
 145  
      */
 146  
     public String getLoggerSoftwareProductName() {
 147  30
         return "Log4J";
 148  
     }
 149  
 
 150  
 }