package logger;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.eclipse.core.runtime.Platform;
public final class LoggerFactory {
private static final Logger logger = Logger.getRootLogger();
private static File errorLog;
public static File getErrorLog() {
return errorLog;
}
static {
// initialise the logger
try {
Layout layout = new PatternLayout(
/*Platform.inDevelopmentMode() ? */ "%d{dd MMM yyyy HH:mm:ss,SSS} %-5p %F Line:%L \t\t %m%n"
/* : "%-5p: %m%n" */);
if (Platform.inDevelopmentMode()) {
ConsoleAppender consoleAppender = new ConsoleAppender(layout);
logger.addAppender(consoleAppender);
}
errorLog = new File(Platform.getInstanceLocation().getURL().getFile(),"error.log");
//for severe errors..
FileAppender fileAppender = new FileAppender(layout, errorLog.getPath(), true);
fileAppender.setThreshold(Level.WARN);
logger.addAppender(fileAppender);
// ALL | DEBUG | INFO | WARN | ERROR | FATAL | OFF:
logger.setLevel(Level.ALL);
} catch (IOException ex) {
System.out.println(ex);
}
}
private LoggerFactory() {
}
public static Logger make(Level level) {
return makeIndirect(level);
}
/**
*
* @return a logger for the calling class
* (used so loggers can be created in static context using always the same line..)
*/
public static Logger make() {
return makeIndirect(Level.INFO);
}
private static Logger makeIndirect(Level level) {
Throwable t = new Throwable();
StackTraceElement directCaller = t.getStackTrace()[2];
Logger l = null;
try {
l = Logger.getLogger(Class.forName(directCaller.getClassName()));
} catch (ClassNotFoundException cnfe) {
l = Logger.getLogger(directCaller.getClassName());
}
if (!Platform.inDevelopmentMode() && Level.INFO.isGreaterOrEqual(level)) {
level = Level.INFO;
}
l.setLevel(level);
return l;
}
/**
* allows adding an appender to the Root logger
* @param appender - the appender to be added
*/
public static void addAppender(Appender appender) {
logger.addAppender(appender);
}
public static void clearErrorLog() {
errorLog.deleteOnExit();
File log = new File(new File(Platform.getInstanceLocation().getURL().getFile(),".metadata"),".log");
if (log.isFile() && !log.delete()) {
log.deleteOnExit();
}
}
}