| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| package java.util.logging; |
| |
| import java.util.Collections; |
| import java.util.Enumeration; |
| import java.util.HashMap; |
| |
| /** |
| * An emulation of the java.util.logging.LogManager class. See |
| * <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/LogManger.html"> |
| * The Java API doc for details</a> |
| */ |
| public class LogManager { |
| |
| private static LogManager singleton; |
| |
| public static LogManager getLogManager() { |
| if (singleton == null) { |
| singleton = new LogManager(); |
| Logger rootLogger = new Logger("", null); |
| rootLogger.setLevel(Level.INFO); |
| singleton.addLoggerImpl(rootLogger); |
| } |
| return singleton; |
| } |
| |
| private HashMap<String, Logger> loggerMap = new HashMap<String, Logger>(); |
| |
| protected LogManager() { } |
| |
| public boolean addLogger(Logger logger) { |
| if (getLogger(logger.getName()) != null) { |
| return false; |
| } |
| addLoggerAndEnsureParents(logger); |
| return true; |
| } |
| |
| public Logger getLogger(String name) { |
| return loggerMap.get(name); |
| } |
| |
| public Enumeration<String> getLoggerNames() { |
| return Collections.enumeration(loggerMap.keySet()); |
| } |
| |
| /** |
| * Helper function to add a logger when we have already determined that it |
| * does not exist. When we add a logger, we recursively add all of it's |
| * ancestors. Since loggers do not get removed, logger creation is cheap, |
| * and there are not usually too many loggers in an ancestry chain, |
| * this is a simple way to ensure that the parent/child relationships are |
| * always correctly set up. |
| */ |
| private void addLoggerAndEnsureParents(Logger logger) { |
| String name = logger.getName(); |
| String parentName = name.substring(0, Math.max(0, name.lastIndexOf('.'))); |
| logger.setParent(ensureLogger(parentName)); |
| addLoggerImpl(logger); |
| } |
| |
| private void addLoggerImpl(Logger logger) { |
| if (System.getProperty("jre.logging.simpleConsoleHandler").equals("ENABLED")) { |
| if (logger.getName().isEmpty()) { |
| logger.addHandler(new SimpleConsoleLogHandler()); |
| } |
| } |
| loggerMap.put(logger.getName(), logger); |
| } |
| |
| /** |
| * Helper function to create a logger if it does not exist since the public |
| * APIs for getLogger and addLogger make it difficult to use those functions |
| * for this. |
| */ |
| Logger ensureLogger(String name) { |
| Logger logger = getLogger(name); |
| if (logger == null) { |
| Logger newLogger = new Logger(name, null); |
| addLoggerAndEnsureParents(newLogger); |
| return newLogger; |
| } |
| return logger; |
| } |
| |
| /* Not Implemented */ |
| // public void addPropertyChangeListener(PropertyChangeListener l) {} |
| // public void checkAccess() {} |
| // public String getProperty(String name) {} |
| // public void readConfiguration() {} |
| // public void readConfiguration(InputStream ins) {} |
| // public void removePropertyChangeListener(PropertyChangeListener l) {} |
| // public void reset() {} |
| } |