001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017 package org.apache.logging.log4j;
018
019 import java.util.Locale;
020
021 /**
022 * Levels used for identifying the severity of an event. Levels are organized from most specific to least:
023 * <ul>
024 * <li>{@link #OFF} (most specific)</li>
025 * <li>{@link #FATAL}</li>
026 * <li>{@link #ERROR}</li>
027 * <li>{@link #WARN}</li>
028 * <li>{@link #INFO}</li>
029 * <li>{@link #DEBUG}</li>
030 * <li>{@link #TRACE}</li>
031 * <li>{@link #ALL} (least specific)</li>
032 * </ul>
033 *
034 * Typically, configuring a level in a filter or on a logger will cause logging events of that level and those
035 * that are more specific to pass through the filter.
036 * A special level, {@link #ALL}, is guaranteed to capture all levels when used in logging configurations.
037 */
038 public enum Level {
039
040 /**
041 * No events will be logged.
042 */
043 OFF(0),
044
045 /**
046 * A severe error that will prevent the application from continuing.
047 */
048 FATAL(1),
049
050 /**
051 * An error in the application, possibly recoverable.
052 */
053 ERROR(2),
054
055 /**
056 * An event that might possible lead to an error.
057 */
058 WARN(3),
059
060 /**
061 * An event for informational purposes.
062 */
063 INFO(4),
064
065 /**
066 * A general debugging event.
067 */
068 DEBUG(5),
069
070 /**
071 * A fine-grained debug message, typically capturing the flow through the application.
072 */
073 TRACE(6),
074
075 /**
076 * All events should be logged.
077 */
078 ALL(Integer.MAX_VALUE);
079
080 private final int intLevel;
081
082 private Level(final int val) {
083 intLevel = val;
084 }
085
086 /**
087 * Converts the string passed as argument to a level. If the
088 * conversion fails, then this method returns {@link #DEBUG}.
089 *
090 * @param sArg The name of the desired Level.
091 * @return The Level associated with the String.
092 */
093 public static Level toLevel(final String sArg) {
094 return toLevel(sArg, DEBUG);
095 }
096
097 /**
098 * Converts the string passed as argument to a level. If the
099 * conversion fails, then this method returns the value of
100 * <code>defaultLevel</code>.
101 *
102 * @param name The name of the desired Level.
103 * @param defaultLevel The Level to use if the String is invalid.
104 * @return The Level associated with the String.
105 */
106 public static Level toLevel(final String name, final Level defaultLevel) {
107 if (name == null) {
108 return defaultLevel;
109 }
110 final String cleanLevel = name.toUpperCase(Locale.ENGLISH);
111 for (final Level level : values()) {
112 if (level.name().equals(cleanLevel)) {
113 return level;
114 }
115 }
116 return defaultLevel;
117 }
118
119 /**
120 * Compares this level against the level passed as an argument and returns true if this
121 * level is the same or more specific.
122 *
123 * @param level The level to check.
124 * @return True if the passed Level is more specific or the same as this Level.
125 */
126 public boolean isAtLeastAsSpecificAs(final Level level) {
127 return intLevel <= level.intLevel;
128 }
129
130 /**
131 * Compares this level against the level passed as an argument and returns true if this
132 * level is the same or more specific.
133 *
134 * @param level The level to check.
135 * @return True if the passed Level is more specific or the same as this Level.
136 */
137 public boolean isAtLeastAsSpecificAs(final int level) {
138 return intLevel <= level;
139 }
140
141 /**
142 * Compares the specified Level against this one.
143 * @param level The level to check.
144 * @return True if the passed Level is more specific or the same as this Level.
145 */
146 public boolean lessOrEqual(final Level level) {
147 return intLevel <= level.intLevel;
148 }
149
150 /**
151 * Compares the specified Level against this one.
152 * @param level The level to check.
153 * @return True if the passed Level is more specific or the same as this Level.
154 */
155 public boolean lessOrEqual(final int level) {
156 return intLevel <= level;
157 }
158
159 /**
160 * Returns the integer value of the Level.
161 * @return the integer value of the Level.
162 */
163 public int intLevel() {
164 return intLevel;
165 }
166 }