Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
LogbackLogManagerV1_6 |
|
| 7.571428571428571;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 | } |