Levelpublic class Level extends Object implements SerializableThe Level class defines a set of standard logging levels that
can be used to control logging output. The logging Level objects
are ordered and are specified by ordered integers. Enabling logging
at a given level also enables logging at all higher levels.
Clients should normally use the predefined Level constants such
as Level.SEVERE.
The levels in descending order are:
- SEVERE (highest value)
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST (lowest value)
In addition there is a level OFF that can be used to turn
off logging, and a level ALL that can be used to enable
logging of all messages.
It is possible for third parties to define additional logging
levels by subclassing Level. In such cases subclasses should
take care to chose unique integer level values and to ensure that
they maintain the Object uniqueness property across serialization
by defining a suitable readResolve method. |
Fields Summary |
---|
private static ArrayList | known | private static String | defaultBundle | private final String | name | private final int | value | private final String | resourceBundleName | public static final Level | OFFOFF is a special level that can be used to turn off logging.
This level is initialized to Integer.MAX_VALUE . | public static final Level | SEVERESEVERE is a message level indicating a serious failure.
In general SEVERE messages should describe events that are
of considerable importance and which will prevent normal
program execution. They should be reasonably intelligible
to end users and to system administrators.
This level is initialized to 1000 . | public static final Level | WARNINGWARNING is a message level indicating a potential problem.
In general WARNING messages should describe events that will
be of interest to end users or system managers, or which
indicate potential problems.
This level is initialized to 900 . | public static final Level | INFOINFO is a message level for informational messages.
Typically INFO messages will be written to the console
or its equivalent. So the INFO level should only be
used for reasonably significant messages that will
make sense to end users and system admins.
This level is initialized to 800 . | public static final Level | CONFIGCONFIG is a message level for static configuration messages.
CONFIG messages are intended to provide a variety of static
configuration information, to assist in debugging problems
that may be associated with particular configurations.
For example, CONFIG message might include the CPU type,
the graphics depth, the GUI look-and-feel, etc.
This level is initialized to 700 . | public static final Level | FINEFINE is a message level providing tracing information.
All of FINE, FINER, and FINEST are intended for relatively
detailed tracing. The exact meaning of the three levels will
vary between subsystems, but in general, FINEST should be used
for the most voluminous detailed output, FINER for somewhat
less detailed output, and FINE for the lowest volume (and
most important) messages.
In general the FINE level should be used for information
that will be broadly interesting to developers who do not have
a specialized interest in the specific subsystem.
FINE messages might include things like minor (recoverable)
failures. Issues indicating potential performance problems
are also worth logging as FINE.
This level is initialized to 500 . | public static final Level | FINERFINER indicates a fairly detailed tracing message.
By default logging calls for entering, returning, or throwing
an exception are traced at this level.
This level is initialized to 400 . | public static final Level | FINESTFINEST indicates a highly detailed tracing message.
This level is initialized to 300 . | public static final Level | ALLALL indicates that all messages should be logged.
This level is initialized to Integer.MIN_VALUE . | private static final long | serialVersionUID |
Constructors Summary |
---|
protected Level(String name, int value)Create a named Level with a given integer value.
Note that this constructor is "protected" to allow subclassing.
In general clients of logging should use one of the constant Level
objects such as SEVERE or FINEST. However, if clients need to
add new logging levels, they may subclass Level and define new
constants.
this(name, value, null);
| protected Level(String name, int value, String resourceBundleName)Create a named Level with a given integer value and a
given localization resource name.
if (name == null) {
throw new NullPointerException();
}
this.name = name;
this.value = value;
this.resourceBundleName = resourceBundleName;
synchronized (Level.class) {
known.add(this);
}
|
Methods Summary |
---|
public boolean | equals(java.lang.Object ox)Compare two objects for value equality.
try {
Level lx = (Level)ox;
return (lx.value == this.value);
} catch (Exception ex) {
return false;
}
| public java.lang.String | getLocalizedName()Return the localized string name of the Level, for
the current default locale.
If no localization information is available, the
non-localized name is returned.
try {
ResourceBundle rb = ResourceBundle.getBundle(resourceBundleName);
return rb.getString(name);
} catch (Exception ex) {
return name;
}
| public java.lang.String | getName()Return the non-localized string name of the Level.
return name;
| public java.lang.String | getResourceBundleName()Return the level's localization resource bundle name, or
null if no localization bundle is defined.
return resourceBundleName;
| public int | hashCode()Generate a hashcode.
return this.value;
| public final int | intValue()Get the integer value for this level. This integer value
can be used for efficient ordering comparisons between
Level objects.
return value;
| public static synchronized java.util.logging.Level | parse(java.lang.String name)Parse a level name string into a Level.
The argument string may consist of either a level name
or an integer value.
For example:
// Check that name is not null.
name.length();
// Look for a known Level with the given non-localized name.
for (int i = 0; i < known.size(); i++) {
Level l = (Level) known.get(i);
if (name.equals(l.name)) {
return l;
}
}
// Now, check if the given name is an integer. If so,
// first look for a Level with the given value and then
// if necessary create one.
try {
int x = Integer.parseInt(name);
for (int i = 0; i < known.size(); i++) {
Level l = (Level) known.get(i);
if (l.value == x) {
return l;
}
}
// Create a new Level.
return new Level(name, x);
} catch (NumberFormatException ex) {
// Not an integer.
// Drop through.
}
// Finally, look for a known level with the given localized name,
// in the current default locale.
// This is relatively expensive, but not excessively so.
for (int i = 0; i < known.size(); i++) {
Level l = (Level) known.get(i);
if (name.equals(l.getLocalizedName())) {
return l;
}
}
// OK, we've tried everything and failed
throw new IllegalArgumentException("Bad level \"" + name + "\"");
| private java.lang.Object | readResolve()
// Serialization magic to prevent "doppelgangers".
// This is a performance optimization.
synchronized (Level.class) {
for (int i = 0; i < known.size(); i++) {
Level other = (Level) known.get(i);
if (this.name.equals(other.name) && this.value == other.value
&& (this.resourceBundleName == other.resourceBundleName ||
(this.resourceBundleName != null &&
this.resourceBundleName.equals(other.resourceBundleName)))) {
return other;
}
}
// Woops. Whoever sent us this object knows
// about a new log level. Add it to our list.
known.add(this);
return this;
}
| public final java.lang.String | toString()
return name;
|
|