/* Copyright (C) 2010 - 2011 Fabian Neundorf, Philip Caroli,
* Maximilian Madlung, Usman Ghani Ahmed, Jeremias Mechler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.ojim.log;
import java.util.LinkedList;
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* Sets up a logger for OJIM
*
* @author Jeremias Mechler
*
*/
public final class OJIMLogger {
private static ConsoleHandler consoleHandler;
private static OJIMFormatter formatter;
private static Level globalLevel = Level.FINEST;
private static LinkedList<Logger> loggerList;
private OJIMLogger() {
}
private static void setupLogger(Logger logger) {
assert (logger != null);
logger.setLevel(globalLevel);
logger.setUseParentHandlers(false);
if (consoleHandler == null) {
consoleHandler = new ConsoleHandler();
}
if (formatter == null) {
formatter = new OJIMFormatter();
}
consoleHandler.setFormatter(formatter);
consoleHandler.setLevel(globalLevel);
if (logger.getHandlers().length == 0) {
logger.addHandler(consoleHandler);
}
}
/**
*
* To be called from outside - creates a new Logger, set up for OJIM purposes
*
* @param name
* The logger's name
* @return A new logger for OJIM
*/
public static Logger getLogger(String name) {
if (name == null) {
throw new IllegalArgumentException("name == null");
}
if (loggerList == null) {
loggerList = new LinkedList<Logger>();
}
Logger result = Logger.getLogger(name);
assert (result != null);
loggerList.add(result);
assert(loggerList.contains(result));
setupLogger(result);
return result;
}
public synchronized static void changeLogLevel(Logger logger, Level level) {
if (logger == null || level == null) {
throw new IllegalArgumentException();
}
logger.setLevel(level);
for (Handler handler : logger.getHandlers()) {
handler.setLevel(level);
}
}
public synchronized static void changeGlobalLevel(Level level) {
level = Level.FINEST;
if (level == null) {
throw new IllegalArgumentException("level == null");
}
globalLevel = level;
for (Logger logger : loggerList) {
changeLogLevel(logger, level);
}
}
public static void printLevel() {
System.out.println(globalLevel);
// assert(false);
}
public static void printLoggerLevel(Logger logger) {
assert(loggerList.contains(logger));
System.out.println(logger.getLevel());
// assert(false);
}
}