1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.log4j.helpers;
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.apache.log4j.Level;
24
25 /**
26 * An extension of the Level class that provides support for java.util.logging
27 * Levels.
28 *
29 *
30 * @author Scott Deboy (sdeboy@apache.org)
31 */
32
33 public class UtilLoggingLevel extends Level {
34
35 /**
36 * Serialization version id.
37 */
38 private static final long serialVersionUID = 909301162611820211L;
39
40 /**
41 * Numerical value for SEVERE.
42 */
43 public static final int SEVERE_INT = 22000;
44 /**
45 * Numerical value for WARNING.
46 */
47 public static final int WARNING_INT = 21000;
48
49 //INFO level defined in parent as 20000..no need to redefine here
50
51 /**
52 * Numerical value for CONFIG.
53 */
54 public static final int CONFIG_INT = 14000;
55 /**
56 * Numerical value for FINE.
57 */
58 public static final int FINE_INT = 13000;
59 /**
60 * Numerical value for FINER.
61 */
62 public static final int FINER_INT = 12000;
63 /**
64 * Numerical value for FINEST.
65 */
66 public static final int FINEST_INT = 11000;
67 /**
68 * Numerical value for UNKNOWN.
69 */
70 public static final int UNKNOWN_INT = 10000;
71
72 /**
73 * SEVERE.
74 */
75 public static final UtilLoggingLevel SEVERE =
76 new UtilLoggingLevel(SEVERE_INT, "SEVERE", 0);
77 /**
78 * WARNING.
79 */
80 public static final UtilLoggingLevel WARNING =
81 new UtilLoggingLevel(WARNING_INT, "WARNING", 4);
82 /**
83 * INFO.
84 */
85 //note: we've aligned the int values of the java.util.logging INFO level with log4j's level
86 public static final UtilLoggingLevel INFO =
87 new UtilLoggingLevel(INFO_INT, "INFO", 5);
88 /**
89 * CONFIG.
90 */
91 public static final UtilLoggingLevel CONFIG =
92 new UtilLoggingLevel(CONFIG_INT, "CONFIG", 6);
93 /**
94 * FINE.
95 */
96 public static final UtilLoggingLevel FINE =
97 new UtilLoggingLevel(FINE_INT, "FINE", 7);
98 /**
99 * FINER.
100 */
101 public static final UtilLoggingLevel FINER =
102 new UtilLoggingLevel(FINER_INT, "FINER", 8);
103 /**
104 * FINEST.
105 */
106 public static final UtilLoggingLevel FINEST =
107 new UtilLoggingLevel(FINEST_INT, "FINEST", 9);
108
109 /**
110 * Create new instance.
111 * @param level numeric value for level.
112 * @param levelStr symbolic name for level.
113 * @param syslogEquivalent Equivalent syslog severity.
114 */
115 protected UtilLoggingLevel(final int level,
116 final String levelStr,
117 final int syslogEquivalent) {
118 super(level, levelStr, syslogEquivalent);
119 }
120
121 /**
122 * Convert an integer passed as argument to a level. If the
123 * conversion fails, then this method returns the specified default.
124 * @param val numeric value.
125 * @param defaultLevel level to be returned if no level matches
126 * numeric value.
127 * @return matching level or default level.
128 */
129 public static UtilLoggingLevel toLevel(final int val,
130 final UtilLoggingLevel defaultLevel) {
131 switch (val) {
132 case SEVERE_INT:
133 return SEVERE;
134
135 case WARNING_INT:
136 return WARNING;
137
138 case INFO_INT:
139 return INFO;
140
141 case CONFIG_INT:
142 return CONFIG;
143
144 case FINE_INT:
145 return FINE;
146
147 case FINER_INT:
148 return FINER;
149
150 case FINEST_INT:
151 return FINEST;
152
153 default:
154 return defaultLevel;
155 }
156 }
157
158 /**
159 * Gets level matching numeric value.
160 * @param val numeric value.
161 * @return matching level or UtilLoggerLevel.FINEST if no match.
162 */
163 public static Level toLevel(final int val) {
164 return toLevel(val, FINEST);
165 }
166
167 /**
168 * Gets list of supported levels.
169 * @return list of supported levels.
170 */
171 public static List getAllPossibleLevels() {
172 ArrayList list = new ArrayList();
173 list.add(FINE);
174 list.add(FINER);
175 list.add(FINEST);
176 list.add(INFO);
177 list.add(CONFIG);
178 list.add(WARNING);
179 list.add(SEVERE);
180 return list;
181 }
182
183 /**
184 * Get level with specified symbolic name.
185 * @param s symbolic name.
186 * @return matching level or Level.DEBUG if no match.
187 */
188 public static Level toLevel(final String s) {
189 return toLevel(s, Level.DEBUG);
190 }
191
192
193 /**
194 * Get level with specified symbolic name.
195 * @param sArg symbolic name.
196 * @param defaultLevel level to return if no match.
197 * @return matching level or defaultLevel if no match.
198 */
199 public static Level toLevel(final String sArg,
200 final Level defaultLevel) {
201 if (sArg == null) {
202 return defaultLevel;
203 }
204
205 String s = sArg.toUpperCase();
206
207 if (s.equals("SEVERE")) {
208 return SEVERE;
209 }
210
211 //if(s.equals("FINE")) return Level.FINE;
212 if (s.equals("WARNING")) {
213 return WARNING;
214 }
215
216 if (s.equals("INFO")) {
217 return INFO;
218 }
219
220 if (s.equals("CONFI")) {
221 return CONFIG;
222 }
223
224 if (s.equals("FINE")) {
225 return FINE;
226 }
227
228 if (s.equals("FINER")) {
229 return FINER;
230 }
231
232 if (s.equals("FINEST")) {
233 return FINEST;
234 }
235 return defaultLevel;
236 }
237
238 }