Coverage Report - net.admin4j.log.LogbackLogManagerV1_6
 
Classes in this File Line Coverage Branch Coverage Complexity
LogbackLogManagerV1_6
61%
44/71
48%
26/54
7.571
 
 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.List;
 18  
 
 19  
 import net.admin4j.exception.LogbackExceptionAppenderV1_6;
 20  
 import net.admin4j.ui.servlets.LogLevelServlet;
 21  
 import net.admin4j.util.Admin4jRuntimeException;
 22  
 import net.admin4j.util.annotate.Product;
 23  
 import net.admin4j.util.annotate.ProductDependencies;
 24  
 import net.admin4j.vo.LoggerVO;
 25  
 import ch.qos.logback.classic.Level;
 26  
 import ch.qos.logback.classic.Logger;
 27  
 import ch.qos.logback.classic.LoggerContext;
 28  
 
 29  
 /**
 30  
  * Logback implementation of a LogManager
 31  
  *
 32  
  * @author D. Ashmore
 33  
  * @since 1.0.4-rc2
 34  
  */
 35  
 @ProductDependencies({ Product.LOGBACK })
 36  12
 public class LogbackLogManagerV1_6 implements LogManager {
 37  
 
 38  
         protected static Level showLessLogging(Level currentLevel) {
 39  3
                 if (Level.OFF.equals(currentLevel)) {
 40  0
                         return Level.OFF;
 41  
                 }
 42  3
                 if (Level.ALL.equals(currentLevel)) {
 43  0
                         return Level.DEBUG;
 44  
                 }
 45  3
                 if (Level.TRACE.equals(currentLevel)) {
 46  3
                         return Level.DEBUG;
 47  
                 }
 48  0
                 if (Level.DEBUG.equals(currentLevel)) {
 49  0
                         return Level.INFO;
 50  
                 }
 51  0
                 if (Level.INFO.equals(currentLevel)) {
 52  0
                         return Level.WARN;
 53  
                 }
 54  0
                 if (Level.WARN.equals(currentLevel)) {
 55  0
                         return Level.ERROR;
 56  
                 }
 57  0
                 if (Level.ERROR.equals(currentLevel)) {
 58  0
                         return Level.ERROR;
 59  
                 }
 60  
 
 61  0
                 return Level.INFO;
 62  
         }
 63  
 
 64  
         protected static Level showMoreLogging(Level currentLevel) {
 65  3
                 if (Level.OFF.equals(currentLevel)) {
 66  0
                         return Level.ERROR;
 67  
                 }
 68  3
                 if (Level.ALL.equals(currentLevel)) {
 69  0
                         return Level.ALL;
 70  
                 }
 71  3
                 if (Level.TRACE.equals(currentLevel)) {
 72  0
                         return Level.ALL;
 73  
                 }
 74  3
                 if (Level.DEBUG.equals(currentLevel)) {
 75  3
                         return Level.TRACE;
 76  
                 }
 77  0
                 if (Level.INFO.equals(currentLevel)) {
 78  0
                         return Level.DEBUG;
 79  
                 }
 80  0
                 if (Level.WARN.equals(currentLevel)) {
 81  0
                         return Level.INFO;
 82  
                 }
 83  0
                 if (Level.ERROR.equals(currentLevel)) {
 84  0
                         return Level.WARN;
 85  
                 }
 86  
 
 87  0
                 return Level.INFO;
 88  
         }
 89  
 
 90  
         public List<LoggerVO> findLoggers() {
 91  9
                 List<LoggerVO> loggerVOs = new ArrayList<LoggerVO>();
 92  9
                 if (!this.isUsingLogback()) {
 93  0
                         return loggerVOs;
 94  
                 }
 95  9
                 LoggerContext loggerContext = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory();
 96  
 
 97  
                 LoggerVO loggerVO;
 98  
                 String loggerLevel;
 99  9
                 for (Logger logger : loggerContext.getLoggerList()) {
 100  87
                         loggerLevel = LogLevelServlet.NONE;
 101  87
                         if (logger.getLevel() != null) {
 102  9
                                 loggerLevel = logger.getLevel()
 103  
                                                 .toString();
 104  
                         }
 105  87
                         loggerVO = new LoggerVO(logger.getName(), loggerLevel,
 106  
                                         this.getLoggerSoftwareProductName());
 107  87
                         loggerVOs.add(loggerVO);
 108  
                 }
 109  9
                 return loggerVOs;
 110  
         }
 111  
 
 112  
         public String getLoggerSoftwareProductName() {
 113  108
                 return "Logback";
 114  
         }
 115  
 
 116  
         public void installExceptionTrackingLogAppender() {
 117  9
                 if (!this.isUsingLogback()) {
 118  0
                         return;
 119  
                 }
 120  9
                 Logger root = (Logger) org.slf4j.LoggerFactory.getILoggerFactory()
 121  
                                 .getLogger(Logger.ROOT_LOGGER_NAME);
 122  9
                 root.addAppender(new LogbackExceptionAppenderV1_6());
 123  
 
 124  9
         }
 125  
 
 126  
         protected boolean isUsingLogback() {
 127  18
                 Object loggerContextObj = org.slf4j.LoggerFactory.getILoggerFactory();
 128  18
                 return (loggerContextObj instanceof LoggerContext);
 129  
         }
 130  
 
 131  
         public String performLogLevelChange(String requestedLoggerName,
 132  
                         LogIncrementType logIncrementType) {
 133  12
                 LoggerContext loggerContext = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory();
 134  12
                 Logger logger = loggerContext.getLogger(requestedLoggerName);
 135  12
                 if (logger == null) {
 136  0
                         throw new Admin4jRuntimeException("Logger not found").addContextValue(
 137  
                                         "requestedLoggerName", requestedLoggerName);
 138  
                 }
 139  
 
 140  12
                 Level logLevel = logger.getLevel();
 141  12
                 if (LogIncrementType.SHOW_MORE.equals(logIncrementType)) {
 142  3
                         if (logLevel == null) {
 143  0
                                 logger.setLevel(Level.WARN);
 144  
                         }
 145  
                         else {
 146  3
                                 logger.setLevel(showMoreLogging(logLevel));
 147  
                         }
 148  
                 }
 149  9
                 else if (LogIncrementType.SHOW_LESS.equals(logIncrementType)) {
 150  3
                         if (logLevel == null) {
 151  0
                                 logger.setLevel(Level.WARN);
 152  
                         }
 153  
                         else {
 154  3
                                 logger.setLevel(showLessLogging(logLevel));
 155  
                         }
 156  
                 }
 157  6
                 else if (LogIncrementType.CLEAR.equals(logIncrementType)
 158  
                                 && !Logger.ROOT_LOGGER_NAME.equals(logger.getName())) {
 159  3
                         logger.setLevel(null);
 160  
                 }
 161  3
                 else if (LogIncrementType.CLEAR.equals(logIncrementType)) {
 162  3
                         logger.setLevel(Level.ERROR);
 163  
                 }
 164  
                 else {
 165  0
                         throw new Admin4jRuntimeException("Unsupported Log Increment Type").addContextValue(
 166  
                                         "logIncrementType", logIncrementType);
 167  
                 }
 168  
 
 169  12
                 if (logger.getLevel() == null) {
 170  3
                         return "";
 171  
                 }
 172  9
                 return logger.getLevel()
 173  
                                 .toString();
 174  
         }
 175  
 
 176  
 }