package org.jggug.hudson.plugins.gcrawler;
import static java.lang.String.format;
import static java.util.logging.Level.FINE;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
public class CrawlLogger {
private static final String LOG_FORMAT = "[%1$s] %2$tT.%2$tL %3$s%n";
private static final Logger logger = Logger.getLogger(CrawlLogger.class.getName());
private Writer writer;
public CrawlLogger(File logFile) {
try {
logFile.deleteOnExit();
writer = new BufferedWriter(new FileWriter(logFile));
} catch (IOException e) {
throw new RuntimeException(e);
}
info(format("Log to %s.", logFile));
}
public void warn(Throwable e) {
log(WARNING, ExceptionUtils.getFullStackTrace(e));
}
public void warn(String message) {
log(WARNING, message);
}
public void info(String message) {
log(INFO, message);
}
public void info(String format, Object... args) {
log(INFO, String.format(format, args));
}
public void debug(String message) {
log(FINE, message);
}
private synchronized void log(Level level, String message) {
if (!logger.isLoggable(level)) {
return;
}
logger.log(level, message);
if (writer != null) {
try {
writer.append(format(LOG_FORMAT, level, new Date(), message));
writer.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
public synchronized void close() {
if (writer == null) {
return;
}
try {
writer.flush();
} catch (IOException ignore) {
// NOP
} finally {
IOUtils.closeQuietly(writer);
}
}
}