package net.varkhan.base.management.logging.compat.log4j;
import java.io.*;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 5/29/11
* @time 5:25 AM
*/
public class Level implements Serializable {
transient int level;
transient String levelStr;
transient int syslogEquivalent;
public static final int FATAL_INT = 1;
public static final int ERROR_INT = 2;
public static final int WARN_INT = 3;
public static final int INFO_INT = 4;
public static final int DEBUG_INT = 5;
public static final int TRACE_INT = 6;
public static final String FATAL_STR = "FATAL";
public static final String ERROR_STR = "ERROR";
public static final String WARN_STR = "WARN";
public static final String INFO_STR = "INFO";
public static final String DEBUG_STR = "DEBUG";
public static final String TRACE_STR = "TRACE";
/**
* The {@code FATAL} level designates very severe error
* events that will presumably lead the application to abort.
*/
public static final Level FATAL = new Level(FATAL_INT, FATAL_STR, 0);
/**
* The {@code ERROR} level designates error events that
* might still allow the application to continue running.
*/
public static final Level ERROR = new Level(ERROR_INT, ERROR_STR, 3);
/**
* The {@code WARN} level designates potentially harmful situations.
*/
public static final Level WARN = new Level(WARN_INT, WARN_STR, 4);
/**
* The {@code INFO} level designates informational messages
* that highlight the progress of the application at coarse-grained
* level.
*/
public static final Level INFO = new Level(INFO_INT, INFO_STR, 6);
/**
* The {@code DEBUG} Level designates fine-grained
* informational events that are most useful to debug an
* application.
*/
public static final Level DEBUG = new Level(DEBUG_INT, DEBUG_STR, 7);
/**
* The {@code TRACE} Level designates finer-grained
* informational events than the <code>DEBUG</code level.
*/
public static final Level TRACE = new Level(TRACE_INT, TRACE_STR, 7);
/**
* Serialization version id.
*/
static final long serialVersionUID = 3491141966387921974L;
/**
* Instantiate a Level object.
*/
protected Level(int level, String levelStr, int syslogEquivalent) {
this.level = level;
this.levelStr = levelStr;
this.syslogEquivalent = 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 str) {
return toLevel(str, 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 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 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 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
* {@code defaultLevel}.
*/
public static Level toLevel(String str, Level defaultLevel) {
if(str == null) return defaultLevel;
if(DEBUG_STR.equalsIgnoreCase(str)) return Level.DEBUG;
if(INFO_STR.equalsIgnoreCase(str)) return Level.INFO;
if(WARN_STR.equalsIgnoreCase(str)) return Level.WARN;
if(ERROR_STR.equalsIgnoreCase(str)) return Level.ERROR;
if(FATAL_STR.equalsIgnoreCase(str)) return Level.FATAL;
if(TRACE_STR.equalsIgnoreCase(str)) return Level.TRACE;
return defaultLevel;
}
public static String[] levelStrings() {
return new String[] { FATAL_STR, ERROR_STR, WARN_STR, INFO_STR, DEBUG_STR, TRACE_STR };
}
public static int[] levelIntegers() {
return new int[] { FATAL_INT, ERROR_INT, WARN_INT, INFO_INT, DEBUG_INT, TRACE_INT };
}
/**
* Custom deserialization of Level.
* @param s serialization stream.
* @throws java.io.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 overridden in classes derived from Level.
* @return resolved object.
* @throws java.io.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;
}
}