/*
* This code is part of Project Waterloo from King's College London
*
*
* Copyright King's College London 2013-
*
* @author Malcolm Lidierth, King's College London [Contact]
*
* Project Waterloo is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Project Waterloo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
*/
package kcl.waterloo.logging;
import java.awt.EventQueue;
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import kcl.waterloo.gui.images.Images;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
/**
* A CommonLogger is used by all internal logging operations in the core
* Waterloo code. It uses the slf4j logging facade. It has no dependencies on
* any specific external logging framework.
*
* CommonLogger also provides some static methods that maintains a count of
* background processes such as potentially lengthy file saves.
*
* @author Malcolm Lidierth
*/
public class CommonLogger implements Logger {
private final Logger logger;
private static final AtomicInteger taskCounter = new AtomicInteger(0);
private static String lastMessage = "";
private final static String tStr = "[TRACE] - ";
private final static String iStr = "[INFO] - ";
private final static String dStr = "[DEBUG] - ";
private final static String wStr = "[WARN] - ";
private final static String eStr = "[ERROR] - ";
private static class Singleton {
private static final JButton taskMonitor = new JButton();
private static final Singleton instance = new Singleton();
private static final Icon icon = Images.getIcon("ajax-loader.gif");
private Singleton() {
taskMonitor.setHorizontalTextPosition(SwingConstants.LEFT);
taskMonitor.setText("Scheduled Tasks ... 0");
}
}
/**
* Logger for the CommonLogger
*/
private static final CommonLogger commonLoggerLogger = new CommonLogger(CommonLogger.class);
/**
* Create a org.slf4j.Logger instance for the requested class
*
* @param clzz the class name as a String.
*/
public CommonLogger(String clzz) {
this.logger = LoggerFactory.getLogger(clzz);
update();
}
public CommonLogger(Class clzz) {
this.logger = LoggerFactory.getLogger(clzz.getName());
update();
}
/**
* @return the taskMonitor
*/
public static JButton getTaskMonitor() {
return Singleton.taskMonitor;
}
public static void incTaskCount() {
synchronized (Singleton.instance) {
taskCounter.incrementAndGet();
update();
}
}
public static void decTaskCount() {
synchronized (Singleton.instance) {
int k = taskCounter.decrementAndGet();
if (k < 0) {
taskCounter.getAndSet(0);
}
update();
if (k < 0) {
commonLoggerLogger.warn("Attempt to set task counter to <0 ignored");
}
}
}
public static int getTaskCount() {
synchronized (Singleton.instance) {
return taskCounter.get();
}
}
private static void update() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
getTaskMonitor().setText(String.format("Scheduled Tasks ... %d", taskCounter.get()));
if (taskCounter.get() <= 0) {
getTaskMonitor().setIcon(null);
} else {
getTaskMonitor().setIcon(Singleton.icon);
}
}
});
}
// Logger methods
@Override
public String getName() {
return "CommonLogger [".concat(logger.getName()).concat("]");
}
@Override
public boolean isTraceEnabled() {
return logger.isTraceEnabled();
}
@Override
public void trace(String string) {
lastMessage = tStr.concat(string);
logger.trace(string);
}
@Override
public void trace(String string, Object o) {
lastMessage = tStr.concat(string);
logger.trace(string, o);
}
@Override
public void trace(String string, Object o, Object o1) {
lastMessage = tStr.concat(string);
logger.trace(string, o, o1);
}
@Override
public void trace(String string, Object... os) {
lastMessage = tStr.concat(string);
logger.trace(string, os);
}
@Override
public void trace(String string, Throwable thrwbl) {
lastMessage = tStr.concat(string);
logger.trace(string, thrwbl);
}
@Override
public boolean isTraceEnabled(Marker marker) {
return logger.isTraceEnabled(marker);
}
@Override
public void trace(Marker marker, String string) {
lastMessage = tStr.concat(string);
logger.trace(marker, string);
}
@Override
public void trace(Marker marker, String string, Object o) {
lastMessage = tStr.concat(string);
logger.trace(marker, string, o);
}
@Override
public void trace(Marker marker, String string, Object o, Object o1) {
lastMessage = tStr.concat(string);
logger.trace(marker, string, o, o1);
}
@Override
public void trace(Marker marker, String string, Object... os) {
lastMessage = tStr.concat(string);
logger.trace(marker, string, os);
}
@Override
public void trace(Marker marker, String string, Throwable thrwbl) {
lastMessage = tStr.concat(string);
logger.trace(marker, string, thrwbl);
}
@Override
public boolean isDebugEnabled() {
return logger.isDebugEnabled();
}
@Override
public void debug(String string) {
lastMessage = dStr.concat(string);
logger.debug(string);
}
@Override
public void debug(String string, Object o) {
lastMessage = dStr.concat(string);
logger.debug(string, o);
}
@Override
public void debug(String string, Object o, Object o1) {
lastMessage = dStr.concat(string);
logger.debug(string, o, o1);
}
@Override
public void debug(String string, Object... os) {
lastMessage = dStr.concat(string);
logger.debug(string, os);
}
@Override
public void debug(String string, Throwable thrwbl) {
lastMessage = dStr.concat(string);
logger.debug(string, thrwbl);
}
@Override
public boolean isDebugEnabled(Marker marker) {
return logger.isTraceEnabled(marker);
}
@Override
public void debug(Marker marker, String string) {
lastMessage = dStr.concat(string);
logger.debug(marker, string);
}
@Override
public void debug(Marker marker, String string, Object o) {
lastMessage = dStr.concat(string);
logger.debug(marker, string, o);
}
@Override
public void debug(Marker marker, String string, Object o, Object o1) {
lastMessage = dStr.concat(string);
logger.debug(marker, string, o, o1);
}
@Override
public void debug(Marker marker, String string, Object... os) {
lastMessage = dStr.concat(string);
logger.debug(marker, string, os);
}
@Override
public void debug(Marker marker, String string, Throwable thrwbl) {
lastMessage = dStr.concat(string);
logger.debug(marker, string, thrwbl);
}
@Override
public boolean isInfoEnabled() {
return logger.isInfoEnabled();
}
@Override
public void info(String string) {
lastMessage = iStr.concat(string);
logger.info(string);
}
@Override
public void info(String string, Object o) {
lastMessage = iStr.concat(string);
logger.info(string, o);
}
@Override
public void info(String string, Object o, Object o1) {
lastMessage = iStr.concat(string);
logger.info(string, o, o1);
}
@Override
public void info(String string, Object... os) {
lastMessage = iStr.concat(string);
logger.info(string, os);
}
@Override
public void info(String string, Throwable thrwbl) {
lastMessage = iStr.concat(string);
logger.info(string, thrwbl);
}
@Override
public boolean isInfoEnabled(Marker marker) {
return logger.isTraceEnabled(marker);
}
@Override
public void info(Marker marker, String string) {
lastMessage = iStr.concat(string);
logger.info(marker, string);
}
@Override
public void info(Marker marker, String string, Object o) {
lastMessage = iStr.concat(string);
logger.info(marker, string, o);
}
@Override
public void info(Marker marker, String string, Object o, Object o1) {
lastMessage = iStr.concat(string);
logger.info(marker, string, o, o1);
}
@Override
public void info(Marker marker, String string, Object... os) {
lastMessage = iStr.concat(string);
logger.info(marker, string, os);
}
@Override
public void info(Marker marker, String string, Throwable thrwbl) {
lastMessage = iStr.concat(string);
logger.info(marker, string, thrwbl);
}
@Override
public boolean isWarnEnabled() {
return logger.isWarnEnabled();
}
@Override
public void warn(String string) {
lastMessage = wStr.concat(string);
logger.warn(string);
}
@Override
public void warn(String string, Object o) {
lastMessage = wStr.concat(string);
logger.warn(string, o);
}
@Override
public void warn(String string, Object o, Object o1) {
lastMessage = wStr.concat(string);
logger.warn(string, o, o1);
}
@Override
public void warn(String string, Object... os) {
lastMessage = wStr.concat(string);
logger.warn(string, os);
}
@Override
public void warn(String string, Throwable thrwbl) {
lastMessage = wStr.concat(string);
logger.warn(string, thrwbl);
}
@Override
public boolean isWarnEnabled(Marker marker) {
return logger.isTraceEnabled(marker);
}
@Override
public void warn(Marker marker, String string) {
lastMessage = wStr.concat(string);
logger.warn(marker, string);
}
@Override
public void warn(Marker marker, String string, Object o) {
lastMessage = wStr.concat(string);
logger.warn(marker, string, o);
}
@Override
public void warn(Marker marker, String string, Object o, Object o1) {
lastMessage = wStr.concat(string);
logger.warn(marker, string, o, o1);
}
@Override
public void warn(Marker marker, String string, Object... os) {
lastMessage = wStr.concat(string);
logger.warn(marker, string, os);
}
@Override
public void warn(Marker marker, String string, Throwable thrwbl) {
lastMessage = wStr.concat(string);
logger.warn(marker, string, thrwbl);
}
@Override
public boolean isErrorEnabled() {
return logger.isErrorEnabled();
}
@Override
public void error(String string) {
lastMessage = eStr.concat(string);
logger.error(string);
}
@Override
public void error(String string, Object o) {
lastMessage = eStr.concat(string);
logger.error(string, o);
}
@Override
public void error(String string, Object o, Object o1) {
lastMessage = eStr.concat(string);
logger.error(string, o, o1);
}
@Override
public void error(String string, Object... os) {
lastMessage = eStr.concat(string);
logger.error(string, os);
}
@Override
public void error(String string, Throwable thrwbl) {
lastMessage = eStr.concat(string);
logger.error(string, thrwbl);
}
@Override
public boolean isErrorEnabled(Marker marker) {
return logger.isTraceEnabled(marker);
}
@Override
public void error(Marker marker, String string) {
lastMessage = eStr.concat(string);
logger.error(marker, string);
}
@Override
public void error(Marker marker, String string, Object o) {
lastMessage = eStr.concat(string);
logger.error(marker, string, o);
}
@Override
public void error(Marker marker, String string, Object o, Object o1) {
lastMessage = eStr.concat(string);
logger.error(marker, string, o, o1);
}
@Override
public void error(Marker marker, String string, Object... os) {
lastMessage = eStr.concat(string);
logger.error(marker, string, os);
}
@Override
public void error(Marker marker, String string, Throwable thrwbl) {
lastMessage = eStr.concat(string);
logger.error(marker, string, thrwbl);
}
/**
* Returns the last String sent to the logger.
*
* @return a String
*/
public static String getLastMessage() {
return lastMessage;
}
}
Ads help maintain this website.