diff --git a/core/src/main/scala/org/apache/log4j/Level.java b/core/src/main/scala/org/apache/log4j/Level.java new file mode 100644 index 000000000..f1d63f15a --- /dev/null +++ b/core/src/main/scala/org/apache/log4j/Level.java @@ -0,0 +1,214 @@ +package org.apache.log4j; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamException; +import java.io.Serializable; + +/** + Defines the minimum set of levels recognized by the system, that is + OFF, FATAL, ERROR, + WARN, INFODEBUG and + ALL. + +

The Level class may be subclassed to define a larger + level set. + + @author Ceki Gülcü + + */ +public class Level implements Serializable { + + public final static int OFF_INT = Integer.MAX_VALUE; + public final static int FATAL_INT = 50000; + public final static int ERROR_INT = 40000; + public final static int WARN_INT = 30000; + public final static int INFO_INT = 20000; + public final static int DEBUG_INT = 10000; + //public final static int FINE_INT = DEBUG_INT; + public final static int ALL_INT = Integer.MIN_VALUE; + + /** + * TRACE level integer value. + * @since 1.2.12 + */ + public static final int TRACE_INT = 5000; + + /** + The OFF has the highest possible rank and is + intended to turn off logging. */ + final static public Level OFF = new Level(OFF_INT, "OFF", 0); + + /** + The FATAL level designates very severe error + events that will presumably lead the application to abort. + */ + final static public Level FATAL = new Level(FATAL_INT, "FATAL", 0); + + /** + The ERROR level designates error events that + might still allow the application to continue running. */ + final static public Level ERROR = new Level(ERROR_INT, "ERROR", 3); + + /** + The WARN level designates potentially harmful situations. + */ + final static public Level WARN = new Level(WARN_INT, "WARN", 4); + + /** + The INFO level designates informational messages + that highlight the progress of the application at coarse-grained + level. */ + final static public Level INFO = new Level(INFO_INT, "INFO", 6); + + /** + The DEBUG Level designates fine-grained + informational events that are most useful to debug an + application. */ + final static public Level DEBUG = new Level(DEBUG_INT, "DEBUG", 7); + + /** + * The TRACE Level designates finer-grained + * informational events than the DEBUGALL has the lowest possible rank and is intended to + turn on all logging. */ + final static public Level ALL = new Level(ALL_INT, "ALL", 7); + + /** + * Serialization version id. + */ + static final long serialVersionUID = 3491141966387921974L; + + /** + Instantiate a Level object. + */ + protected + Level(int level, String levelStr, int syslogEquivalent) { + //super(level, levelStr, syslogEquivalent); + } + + + /** + Convert the string passed as argument to a level. If the + conversion fails, then this method returns {@link #DEBUG}. + */ + public + static + Level toLevel(String sArg) { + return (Level) toLevel(sArg, Level.DEBUG); + } + + /** + Convert an integer passed as argument to a level. If the + conversion fails, then this method returns {@link #DEBUG}. + + */ + public + static + Level toLevel(int val) { + return (Level) toLevel(val, Level.DEBUG); + } + + /** + Convert an integer passed as argument to a level. If the + conversion fails, then this method returns the specified default. + */ + public + static + Level toLevel(int val, Level defaultLevel) { + switch(val) { + case ALL_INT: return ALL; + case DEBUG_INT: return Level.DEBUG; + case INFO_INT: return Level.INFO; + case WARN_INT: return Level.WARN; + case ERROR_INT: return Level.ERROR; + case FATAL_INT: return Level.FATAL; + case OFF_INT: return OFF; + case TRACE_INT: return Level.TRACE; + default: return defaultLevel; + } + } + + /** + Convert the string passed as argument to a level. If the + conversion fails, then this method returns the value of + defaultLevel. + */ + public + static + Level toLevel(String sArg, Level defaultLevel) { + if(sArg == null) + return defaultLevel; + + String s = sArg.toUpperCase(); + + if(s.equals("ALL")) return Level.ALL; + if(s.equals("DEBUG")) return Level.DEBUG; + if(s.equals("INFO")) return Level.INFO; + if(s.equals("WARN")) return Level.WARN; + if(s.equals("ERROR")) return Level.ERROR; + if(s.equals("FATAL")) return Level.FATAL; + if(s.equals("OFF")) return Level.OFF; + if(s.equals("TRACE")) return Level.TRACE; + // + // For Turkish i problem, see bug 40937 + // + if(s.equals("\u0130NFO")) return Level.INFO; + return defaultLevel; + } + +// /** +// * Custom deserialization of Level. +// * @param s serialization stream. +// * @throws IOException if IO exception. +// * @throws ClassNotFoundException if class not found. +// */ +// private void readObject(final ObjectInputStream s) throws IOException, ClassNotFoundException { +// s.defaultReadObject(); +// level = s.readInt(); +// syslogEquivalent = s.readInt(); +// levelStr = s.readUTF(); +// if (levelStr == null) { +// levelStr = ""; +// } +// } +// +// /** +// * Serialize level. +// * @param s serialization stream. +// * @throws IOException if exception during serialization. +// */ +// private void writeObject(final ObjectOutputStream s) throws IOException { +// s.defaultWriteObject(); +// s.writeInt(level); +// s.writeInt(syslogEquivalent); +// s.writeUTF(levelStr); +// } + + /** + * Resolved deserialized level to one of the stock instances. + * May be overriden in classes derived from Level. + * @return resolved object. + * @throws ObjectStreamException if exception during resolution. + */ + private Object readResolve() throws ObjectStreamException { + // + // if the deserizalized object is exactly an instance of Level + // +// if (getClass() == Level.class) { +// return toLevel(level); +// } +// // + // extension of Level can't substitute stock item + // + return this; + } + +} \ No newline at end of file