package ru.finam.slf4jgwt.logging.gwt;
import org.slf4j.helpers.FormattingTuple;
import org.slf4j.helpers.MarkerIgnoringBase;
import org.slf4j.helpers.MessageFormatter;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A wrapper over {@link java.util.logging.Logger java.util.logging.Logger}
* supported since GWT 2.1.
*
* @author Andrei Korzhevskii <a.korzhevskiy@gmail.com>
*/
public class GWTLoggerAdapter extends MarkerIgnoringBase {
private final Logger logger;
public GWTLoggerAdapter(String name) {
this.name = name;
logger = Logger.getLogger(name);
}
@Override
public boolean isTraceEnabled() {
return logger.isLoggable(Level.FINEST);
}
@Override
public void trace(String msg) {
log(Level.FINEST, msg, null);
}
@Override
public void trace(String format, Object arg) {
formatAndLog(Level.FINEST, format, arg);
}
@Override
public void trace(String format, Object arg1, Object arg2) {
formatAndLog(Level.FINEST, format, arg1, arg2);
}
@Override
public void trace(String format, Object... argArray) {
formatAndLog(Level.FINEST, format, argArray);
}
@Override
public void trace(String msg, Throwable t) {
log(Level.FINEST, msg, t);
}
@Override
public boolean isDebugEnabled() {
return logger.isLoggable(Level.FINE);
}
@Override
public void debug(String msg) {
log(Level.FINE, msg, null);
}
@Override
public void debug(String format, Object arg) {
formatAndLog(Level.FINE, format, arg);
}
@Override
public void debug(String format, Object arg1, Object arg2) {
formatAndLog(Level.FINE, format, arg1, arg2);
}
@Override
public void debug(String format, Object... argArray) {
formatAndLog(Level.FINE, format, argArray);
}
@Override
public void debug(String msg, Throwable t) {
log(Level.FINE, msg, t);
}
@Override
public boolean isInfoEnabled() {
return logger.isLoggable(Level.INFO);
}
@Override
public void info(String msg) {
log(Level.INFO, msg, null);
}
@Override
public void info(String format, Object arg) {
formatAndLog(Level.INFO, format, arg);
}
@Override
public void info(String format, Object arg1, Object arg2) {
formatAndLog(Level.INFO, format, arg1, arg2);
}
@Override
public void info(String format, Object... argArray) {
formatAndLog(Level.INFO, format, argArray);
}
@Override
public void info(String msg, Throwable t) {
log(Level.INFO, msg, t);
}
@Override
public boolean isWarnEnabled() {
return logger.isLoggable(Level.WARNING);
}
@Override
public void warn(String msg) {
log(Level.WARNING, msg, null);
}
@Override
public void warn(String format, Object arg) {
formatAndLog(Level.WARNING, format, arg);
}
@Override
public void warn(String format, Object arg1, Object arg2) {
formatAndLog(Level.WARNING, format, arg1, arg2);
}
@Override
public void warn(String format, Object... argArray) {
formatAndLog(Level.WARNING, format, argArray);
}
@Override
public void warn(String msg, Throwable t) {
log(Level.WARNING, msg, t);
}
@Override
public boolean isErrorEnabled() {
return logger.isLoggable(Level.SEVERE);
}
@Override
public void error(String msg) {
log(Level.SEVERE, msg, null);
}
@Override
public void error(String format, Object arg) {
formatAndLog(Level.SEVERE, format, arg);
}
@Override
public void error(String format, Object arg1, Object arg2) {
formatAndLog(Level.SEVERE, format, arg1, arg2);
}
@Override
public void error(String format, Object... argArray) {
formatAndLog(Level.SEVERE, format, argArray);
}
@Override
public void error(String msg, Throwable t) {
log(Level.SEVERE, msg, t);
}
private void log(Level level, String msg, Throwable t) {
if (logger.isLoggable(level)) {
logger.log(level, msg, t);
}
}
private void formatAndLog(Level level, String format, Object... argArray) {
if (logger.isLoggable(level)) {
FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
logger.log(level, ft.getMessage(), ft.getThrowable());
}
}
}